SSRS中, 如何将Multi Value传递到SQL的in clause中.

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了~

 

你可能感兴趣的:(SSRS中, 如何将Multi Value传递到SQL的in clause中.)