我正在尝试在SQL Server Management Studio中测试SQL查询,该查询通常需要SSRS报告中的多值参数。
我不确定在管理工作室中编写多值参数有多难。该报告是由供应商创建的,我只是想让它可以在SSRS之外进行测试。
例如,SSRS中的参数是用户选择的数字集合 - 即“3100,3102,3105”将是名为@object_code的多值参数的选择
我有类似的东西 - 但它不起作用。
Declare @Object_Code varchar(100)
Set @object_Code = ('3100','3102','3105')
....really long vendor written query I don't thoroughly understand...
IN(@object_code)
您必须使用String-Split
函数来分隔逗号分隔值。例如-
Declare @Object_Code varchar(100)
Set @Object_Code = '3100,3102,3105'
....really long vendor written query I dont thoroughly understand...
--T.object_code IN (@object_code)
Inner Join dbo.Split(@Object_Code, ',') as S On S.data = T.object_code
首先在数据库中搜索任何string-split
函数。如果你想创建string-split
函数,那么按照这个 - T-SQL split string
如果您使用SQL Server 2016,则可能需要查看函数STRING_SPLIT。
如果您使用较低版本的SQL Server而您不能或不想创建单独的函数,则可以选择以下方法:
declare @object_code varchar(100);
set @object_code = '3100,3102,3105';
select
ltrim(rtrim(x.par.value('.[1]','varchar(max)'))) as object_code
from (
select convert(xml,'<params><param>' + replace(@object_code,',', '</param><param>') + '</param></params>') as c
) tbl
cross apply
c.nodes('/params/param') x(par);
每个人似乎都在分手一个不必是字符串的字符串。我们只是在这里查询查询时遇到麻烦,需要一种方法来提供它的价值。 SSRS如何做到这一点并不重要,只是我们可以重现结果。
Declare @Object_Code table (params varchar(20));
INSERT @object_Code
VALUES ('3100'),('3102'),('3105')
....really long vendor written query I don't thoroughly understand...
IN (SELECT params FROM @object_code)
然后花一些时间来了解查询。