我仍然是使用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)
答案 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的值传递给存储过程。