我刚刚开始在SSRS中开发报告,如果可能的话,我将非常感谢您对此问题的一些帮助!我从Dynamics数据库中选择数据集,然后希望将它们传递给另一个数据集中引用的SQL Server存储过程,以从另一个数据库中检索数据。我创建了一个报表参数,并将其设置为允许多个值,并从查询中检索其值并将其设置为我想要检索的字段。
数据集如下所示:
U1234
U5678
U6789
在使用存储过程的数据集中,我设置了一个参数@pnum
,在参数值字段中,我使用Join
语句创建了一个表达式,如下所示:
Join(Parameters!pnum.Value, ", ")
当它传递给存储过程时,它似乎传递了一个格式如下的字符串:
'U1234, U5678, U6789'
而我想要达到的目的是:
'U1234', 'U5678', 'U6789'
这样我就可以在IN
语句中使用它们。有没有办法在SSRS中做到这一点?
非常感谢!
答案 0 :(得分:1)
对于遇到此问题的任何其他人,关于如何将值传递给存储过程以及如何使用它们的问题中的假设是不正确的。
从join
表达式传递的值将被格式化为,在开头和结尾没有单引号:
U1234, U5678, U6789
此外,当作为单个字符串传递给存储过程时,只能使用动态SQL将其用作in
列表。
要解析并过滤传递的值,需要在分隔符上拆分字符串并将其插入到表(临时或其他)中以join
编辑。
可以使用以下逻辑找到合适的拆分here(尽管存在其他可能更符合您需求的拆分):
declare @xml as xml,@str as varchar(100),@delimiter as varchar(10)
set @str='A,B,C,D,E'
set @delimiter =','
set @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
select N.value('.', 'varchar(10)') as value from @xml.nodes('X') as T(N)
如果您不必将值传递给存储过程并使用硬编码数据集(共享或非共享),您实际上可以直接使用参数值,而无需在查询中添加额外的处理或添加{{ 1}}表达式到报告中的参数值:
join
答案 1 :(得分:-1)
您必须添加一个额外字段,其值包含在引号中。
像这样:
SELECT field1 AS display, '''' + field1 + '''' AS value