2016-12-13 76 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 –

相關問題