在SSRS报告中使用多个参数的问题(存储过程)

时间:2016-06-15 16:58:00

标签: sql-server stored-procedures reporting-services

我已经阅读了关于这个主题的无数帖子,但我似乎无法获得适用于我的特定情况的任何建议(这与其他人没有什么不同......)

我有一份SSRS报告。数据集1正在使用存储过程,并在where子句中有

    and (@param is null or alias.column in 
    (select Item from dbo.ufnSplit(@param,',')))

我在这篇文章中借用了dbo.ufnSplit函数:https://stackoverflow.com/a/512300/22194

    FUNCTION [dbo].[ufnSplit]
    (@RepParam nvarchar(max), @Delim char(1)= ',')
 RETURNS @Values TABLE (Item nvarchar(max))AS
 --based on John Sansoms StackOverflow answer:
 --https://stackoverflow.com/a/512300/22194

   BEGIN
   DECLARE @chrind INT
   DECLARE @Piece nvarchar(100)
   SELECT @chrind = 1 
   WHILE @chrind > 0
     BEGIN
       SELECT @chrind = CHARINDEX(@Delim,@RepParam)
       IF @chrind  > 0
         SELECT @Piece = LEFT(@RepParam,@chrind - 1)
       ELSE
         SELECT @Piece = @RepParam
       INSERT  @Values(Item) VALUES(@Piece)
       SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
       IF LEN(@RepParam) = 0 BREAK
     END
   RETURN
   END 

在数据集2中,我得到了我想传递给数据集1的值

    select distinct list from table

我的@param参数配置为查看数据集2的可用值

我的问题是,如果我从@param的参数下拉列表中选择一个值,则报告可以正常工作。如果我从下拉列表中选择多个值,我只返回所选第一个值的数据。

我在数据集2中的值不包含任何's

我是否因为未能提供足够的信息而错过任何内容?我很乐意接受批评,反馈,为此做点什么和不做,我一直在努力解决这个问题,而不是SQL专家:)

干杯, MD

更新因此,SQL事件探查器向我展示了这一点:

exec sp ... @ param = N'value1,value2,value3'

问题是: 1.每个价值都不应该用单引号括起来吗? 2.列表前的N是什么? 3.猜测需要裁掉尾随空间

2 个答案:

答案 0 :(得分:0)

从参数下拉列表中选择多个值时,它们将存储在数组中。为了将其转换为可以传递给SQL的字符串,可以使用Join函数。转到数据集属性,然后转到“参数”选项卡。用以下表达式替换参数值:

=Join(Parameters!param.Value, ",")

它应该是这样的:

enter image description here

现在你的split函数将获得一个逗号分隔的字符串,就像它应该的那样。我还建议在分离它们之后让分割功能从值中删除空格。

答案 1 :(得分:0)

所以我想出来并希望在此发布我的结果,希望它可以帮助其他人。

数据不佳。一个尾随空间炸毁了我的整个结果集,直到我经历了几个场景(选择了许多参数组合)之后我才注意到它。

我的结果集有尾随空格 - 一旦我对它进行了rtrim,我就不必在SSRS中进行任何花哨的连接/分割。