我很难弄清楚如何使这项工作:
我有一个用于报告的大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
答案 0 :(得分:0)
我设法使用以下方法解决了这个问题:
1-在我的数据集中,我没有按原样传递参数,而是将其更改为:
Join (Parameters!FilterValues.Value," ',' ")
强制将值作为字符串发送,参数值如下:
1234567','122345','12345
2-在SQL中,在我的过程中,我在参数的开头和结尾添加了额外的'
以弥补缺失的值。所以我的代码显示如下:
Set @Sql='Select * from my table where field in ('''+@filtervalues+''')'