在变量SQL

时间:2016-12-13 19:05:11

标签: sql reporting-services

我仍然是使用SQL的新手,所以任何事情都会有所帮助。我的目标是添加一个参数,以允许用户根据单个列过滤掉结果。我在SSRS工作,我的表格布局在那里有一个表,其中有一列用户为其他表中的列创建了标签。我正在动态搜索我需要的列名,然后使用它从第二个表中提取我需要的信息。但是,当我想添加一个参数来过滤结果时,就会出现问题。

DECLARE @Root varchar(max);
DECLARE @Command varchar(max);
SET @Root=(SELECT ColumnName FROM FirstTable WHERE USER_LABEL = 'Results')
SET @Command = 'SELECT
  CASE
    WHEN 
      '+@Root+' IS NULL THEN ''Null''
    ELSE
      '+@Root+'
  END AS "Result"
  ,COUNT(*) AS "Number"
  ,CAST(ROUND(COUNT(*)*100.0/(SELECT COUNT(*) FROM SecondTable),1) AS DECIMAL(4,1)) AS "Percentage"
FROM SecondTable

根据我的理解,SSRS在创建参数时会帮助您,以下行似乎是我创建参数所必须做的唯一事情。

WHERE Filter = @filt

但是,我收到一条错误,指出我“必须声明标量变量'@filt'。”有没有解决这个问题?看起来它希望我将@filt声明为它所在的字符串变量中的变量。

GROUP BY '+@Root+''
EXEC(@Command)

1 个答案:

答案 0 :(得分:1)

我相信您需要声明变量然后将其附加到字符串才能使其生效。

  DECLARE @filt varchar(max) --pick correct length and 
                             --add to the rest of your variable declarations

然后将变量附加到命令的末尾:

  'WHERE Filter =' + @filt + ' GROUP BY '+@Root

然后,您可以使用SSRS将@filt的值传递给存储过程。