SSRS中, 可以创建个可多选的参数, 该参数可以作为查询项传递给SQL语句.
我遇到的问题是这样的.
1. 我创建了一个可以多选的参数.
2. 将该参数传递到了SQL的一条Select中.
3. select中是这样写的"select * from table where column in (@CoverageID)"
问题就是, SSRS上面的Report只要该值为单一的时候有效, 只要和复选,就没有用了.
比如说,有值1,2,3,4,5在列表中, 如果选择2个以上, SQL就执行不出正确的结果.
看了一下, 原来问题出在参数项上.
如果选择一个值的话@CoverageID的值就是 '1' 这样的话 查询语句为 select * from table where column in ('1') 这样结果是正确的.
如果选择二个或者2个以上的值@CoverageID的值就变成了'1,2,3,4',等多个以逗号为分隔的字符串,
查询就是select * from table where column in ('1,2,3,4') 语法是正确的, 但是肯定不是我们想要的查询结果.
真正的查询是select * from table where column in('1','2','3','4')
既然找到问题了, 解决就只是时间的问题.
这里利用一个现成的功能, 将以指定字符串, 用指定的分隔符分开, 存于一个只有一列的table变量中.
CREATE function [dbo].[f_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
GO
当函数创建好之后,
上面的查询可以稍改一下, 改为 select * from table where column in (select * from dbo.f_split(@CoverageID,','))
就OK了, 我们的SSRS 从此可以支持in clause了~