与execute(@sql)一起使用的多值参数

时间:2014-06-24 14:11:48

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

我很难弄清楚如何使这项工作:

我有一个用于报告的大SQL查询,它使用" execute(@sql)"运行。 使用@sql我有各种select语句,我想使用从我的报告@filtervalues传递的多值参数中的值进行过滤。

我测试过以下内容(这是一个示例查询):

Set @Sql='Select * from my table where field in ('+@filtervalues+')'

当我在参数中选择单个值时,探查器会按如下方式读取它:

Select * from mytable where field in(1234356-1234-1234-1234-123456)

所以选定的Guid没有引号,导致" error near 123456"

另一方面,如果我选择了几个值:

Select * from mytable where field in ('+N'1234456-1231-1234-1244566',N'2345333-3243-2342-2342-23423423'+)

因此它增加了额外的'+

你能帮我解决这个问题吗?

注意: 我无法在许多网站上使用建议的解决方案直接在表格上应用过滤器,因为这会弄乱数据。

修改 使用此查询数据集填充多值参数:

select 'No Filter' as fullname,'00000000-0000-0000-0000-000000000000' as systemuserid
union all
select distinct su.fullname, convert(nvarchar(90),su.systemuserid)
from  FilteredSystemUser su

1 个答案:

答案 0 :(得分:0)

我设法使用以下方法解决了这个问题:

1-在我的数据集中,我没有按原样传递参数,而是将其更改为:

Join (Parameters!FilterValues.Value," ',' ")

强制将值作为字符串发送,参数值如下:

1234567','122345','12345

2-在SQL中,在我的过程中,我在参数的开头和结尾添加了额外的'以弥补缺失的值。所以我的代码显示如下:

Set @Sql='Select * from my table where field in ('''+@filtervalues+''')'