在没有存储过程的情况下将多值参数传递到SSRS中的变量

时间:2017-01-27 17:36:15

标签: sql-server reporting-services ssrs-2008

我无法访问sp,但是我创建了一个动态查询,它将接受一个多值参数,将其传递给一个变量,然后在查询中使用该变量。我的查询的简短例子。

DECLARE @Parameter2 varchar(200)
SET @Parameter2 = @Parameter1

SELECT personID from foo where filename IN (@Parameter2)

我有@ Parameter1的报告参数,它允许多个值,这些值将来自数据集中的另一个查询。我可以将@ Parameter1中的单个文件名传递给@ Parameter2而没有任何问题,但是当选择多个文件名时,我会在......','中获得"无效语法。因为参数传递像这样' filename1,filename2,filename3'。

如何将这些多个参数从@ Parameter1解析为@ Parameter2,以便在没有存储过程的情况下在查询中使用它?我试着在这里查看不同的主题并将@ Parameter1拆分为","并加入数据集属性中的变量,但我仍然得到无效的语法错误或声明标量变量错误。

我在SQL Server上没有太多经验,但是在预览中选择字符串之后分割字符串似乎很困难,而字符串首先不会通过sp。

1 个答案:

答案 0 :(得分:0)

由于您可以执行DYNAMIC SQL,请考虑以下

DECLARE @Parameter1 varchar(200) = 'filename1,filename2,filename'

DECLARE @Parameter2 varchar(200) = ''''+Replace(@Parameter1,',',''',''')+''''

Declare @SQL varchar(max) = 'SELECT personID from foo where filename IN ('+@Parameter2+')'
Exec(@SQL)

生成的SQL看起来像这样:

SELECT personID from foo where filename IN ('filename1','filename2','filename')