我在使用SQL Server时正在寻找一些有趣的问题的见解。
背景
问题陈述
顺便说一句,多值参数将无法按照我假设的方式工作。
当我查看此内容时,这似乎是一个已知问题,并且是SSRS支持不力的功能之一。似乎多值参数中的多个值仅被视为单个值,即使在打印时它们看起来像多个值,如
val1,val2,val3
=Join(Parameters!param_1.Value,"|")
--Relevant code:
-- Block of conversion code
-- to convert/format the multivalued param and store it in a new variable
-- after this the SQLSTRING variable's final value is set as
-- |val1|val2|val3|
-- Relevant where clause
AND
(@SQLString LIKE '%|' + tbl.attr_1 + '|%')
问题
提前感谢。
使用我自己的数据进行采样:
我使用的SSRS加入:
=Join(Parameters!param_1.Value,"#~--~#")
然后是存储过程:
create proc whatever @profs varchar(8000) as declare @profs_t table (ProfName varchar(70)) declare @delim varchar(10) = '#~--~#' declare @delimlen int = len(@delim) declare @idx int = 1 - @delimlen while charindex(@delim, @profs, @idx + @delimlen) <> 0 begin insert into @profs_t select substring(@profs, @idx + @delimlen, charindex(@delim, @profs, @idx + @delimlen) - @idx - @delimlen) set @idx = charindex(@delim, @profs, @idx + @delimlen) end insert into @profs_t select substring(@profs, @idx + @delimlen , len(@profs)) select * from @profs_t pt inner join professionals p on p.profname = pt.profname
这会将连接参数从SSRS转换为表变量(您可以很容易地使用临时表)。这是相当通用的,可以使用任何定界符,甚至可以使用多个字符定界符(如图所示)。我想定界符也可以作为参数传递给proc。