2013-08-01 458 views
0

我已經構建了一個SSRS報告,該報告應該查看具有相似名稱的幾個表中的數據 - 即table001,table010,table011等。在構建報告時,我只有三張桌子,其中有十幾桌。一切工作正常,直到我將所有其餘的表添加到查詢,使用多個SELECT語句UNIONed在一起;它試圖對這麼多的數據進行分類,以至於花了差不多半小時的時間來呈現報告。這是行不通的。將SSRS參數傳遞給SQL查詢

有沒有辦法將SSRS參數傳遞給SQL查詢,指定要訪問的表?

+0

如果查詢速度慢,報告將會很慢。問題不在於將參數從SSRS傳遞到數據庫,而是您的查詢。你需要找出如何解決你的問題聯合在一起12表,並且你的報告問題將解決自己 – Tom

+0

@Tom - 這就是爲什麼我想弄清楚如何使用變量的表名。如果我能做到這一點,我可以只查詢一個表而不是所有的表 - 只要將報表參數傳遞給變量,它就會基於這個查詢進行查詢。我只是不知道該怎麼做。 –

+0

對不起,我現在看到,我先不理解這個問題。那麼,基於某些參數,您將從某個表中選擇?例如,@Param ='Something'然後從table008中選擇?您可以在查詢中的「if/else」或「case」語句中進行定義。 – Tom

回答

0

根據您的意見,你可以做到以下幾點

DECLARE @Parameter NVARCHAR(15) = 'Foo' 

SELECT CASE 
WHEN @Parameter IN ('Foo', 'Bar') 
    THEN (
      SELECT * 
      FROM table001 
     ) 
WHEN @Parameter IN ('Foobar') 
    THEN (
      SELECT * 
      FROM table002 
     ) 
ELSE 
     (
      SELECT * 
      FROM table003 
     ) 
END 


或者

SELECT CASE @Parameter 
WHEN 'Foo' 
    THEN (
      SELECT * 
      FROM table001 
     ) 
WHEN 'Bar' 
    THEN (
      SELECT * 
      FROM table002 
     ) 
WHEN 'Foobar' 
    THEN (
      SELECT * 
      FROM table003 
     ) 
ELSE 
    (
     SELECT * 
     FROM @table004 
    ) 
END 
+0

在第一個示例中,我看不到報表參數的值如何轉到查詢。它看起來像你只是聲明一個SQL變量,並立即分配一個值。 –

+0

另外,我嘗試了第二個例子。它給了我三個錯誤 - '必須聲明標量變量@Param','關鍵字ELSE'附近的語法錯誤,'關鍵字SET'附近的語法錯誤' –

+0

好吧,這是出於演示目的。也許我不明白這個問題 - 你的問題的完整性是如何在SSRS中傳遞參數?我猜這*是*標題所說的。在這種情況下,http://msdn.microsoft.com/en-us/library/aa337432(v=sql.105).aspx是關於這個主題的深入文章。 – Tom