2016-12-13 40 views
2

我对于使用SQL还是比较新的,所以任何事情都会有所帮助。我的目标是添加一个参数,以允许用户根据单个列筛选结果。我正在SSRS中工作,并且我的表格布局方式是有一个表格,其中有一列包含用户为其他表格中的列创建标签的列。我正在动态搜索我需要的列名,然后使用它将我需要的信息从第二个表中取出。但是,当我想添加一个参数来过滤结果时,会遇到麻烦。在变量中使用参数时遇到问题SQL

DECLARE @Root varchar(max); 
DECLARE @Command varchar(max); 
SET @Root=(SELECT ColumnName FROM FirstTable WHERE USER_LABEL = 'Results') 
SET @Command = 'SELECT 
    CASE 
    WHEN 
     '[email protected]+' IS NULL THEN ''Null'' 
    ELSE 
     '[email protected]+' 
    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 '[email protected]+'' 
EXEC(@Command) 

回答

1

我相信你需要声明这个变量,然后将它附加到字符串中以便工作。

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

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

'WHERE Filter =' + @filt + ' GROUP BY '[email protected] 

然后可以使用SSRS来@filt的值传递到存储过程。

+0

我试图这样做,但它没有得到任何结果。通常在SSRS中,当查询在查询设计器中运行时,会弹出一个窗口来自动创建参数。但是,没有弹出窗口。我必须手动创建参数吗? –

+0

您应该创建一个存储过程并从SSRS调用它。这应该使参数显示在SSRS中,以便您可以为其分配一个值。 –

+0

我还发现此链接讨论主题:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f7b85430-66f3-4932-a69c-3e41ddee4f3a/how-to-pass-report-parameters -to-stored-procedure-in-report-builder-30?forum = sqlreportingservices –

相关问题