gpt4 book ai didi

sql-server - 在 SQL Server Business Intelligence Development Studio 中将多值参数转换为临时表

转载 作者:行者123 更新时间:2023-12-03 02:09:02 25 4
gpt4 key购买 nike

我想在 MS SQL Server BIDS(SSMS 和 Visual Studio)中创建报告。用户将输入电子邮件地址列表作为参数。因此 @pEmails 将为“foo@bluh.com”、“bar@meh.org”等。这些电子邮件地址可能位于也可能不在表中。

我可以简单地做:

和 (@pEmails) 中的 Table.Email

这可行,但如果也没有找到,我需要返回电子邮件地址。所以结果会是这样的:

|email       |found in table|  
|------------|--------------|
|foo@bluh.com| Y |
|bar@meh.org | N |

我想我可以采用作为 @pEmails 参数输入的值列表,并用它们创建一个临时表,然后我可以将其保留连接,但我的尝试尚未成功。

declare @pEmails table (EmailAddress varchar(255));
insert into @pEmails values (@ReportParameter1);

select
*
from
@pEmails

如果仅将单个值放入@ReportParameter1,则以上方法有效,但如果其中有多个值则无效。

我正在使用 SQL Server 2008。关于如何最好地进行操作有什么建议吗?

最佳答案

如前所述,您需要某种 split 函数,用于分析各种方法的性能 Split strings the right way – or the next best way是一本极好的读物。有了函数后,您需要将查询参数定义为字符串,而不是表:

所以你的查询实际上会变成:

DECLARE @pEmails TABLE (EmailAddress varchar(255));

INSERT @pEmails (EmailAddress)
SELECT Value
FROM dbo.Split(@pEmallString);

然后转到数据集属性,不要将多值参数 @pEmails 传递给数据集,而是创建一个新的 @pEmailString,并将值设置为一个表达式,应该是:

=Join(Parameters!pEmails.Value, ",")

enter image description here

这会将您的多值参数转换为单个逗号分隔的字符串。看起来很倒退,您需要将其转换为分隔字符串,然后才在 SQL 中拆分它,不幸的是我不知道更好的方法。

关于sql-server - 在 SQL Server Business Intelligence Development Studio 中将多值参数转换为临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40534211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com