0

我正在使用SQL Server 2012和SSRS。使用this非常有用的答案,我有一個參數化的查詢工作,通過openquery從DB2系統中提取數據。我想將其製作成SSRS報告。我不知道如何使用查詢做到這一點,所以我建立了一個小的存儲過程中包裹查詢,像這樣:使用嵌入式TSQL exec字符串爲SSRS報告生成輸出參數

ALTER PROCEDURE dbo.QueryInfoByID 
-- Add the parameters for the stored procedure here 
@inputid varchar(10), 
@outputfield varchar(50) output 
AS 
BEGIN 
    DECLARE @TSQL varchar(8000); 
    SELECT @TSQL = 'SELECT * FROM OPENQUERY(IMG2677,''SELECT outputfield FROM mytable WHERE outputfield = ''''' + @inputid + ''''''')' 
    EXEC (@TSQL) 
END 

如何連接起來嵌在與該@TSQL的outputfield SP輸出參數列表中的@outputfield?我嘗試了一些Google搜索,找不到解決此問題的任何內容。道歉,如果這是一個新手問題;在存儲過程中,我沒有做太多的輸出參數。

回答

0

我相信你只需要改變你的動態查詢來說明參數。

ALTER PROCEDURE dbo.QueryInfoByID 
-- Add the parameters for the stored procedure here 
@inputid varchar(10), 
@outputfield varchar(50) output 
AS 
BEGIN 
    DECLARE @TSQL varchar(8000); 
    SELECT @TSQL = 'SELECT * FROM OPENQUERY(IMG2677,''SELECT '''' + @outputfield + '''' FROM mytable WHERE '''' + @outputfield + ''''= ''''' + @inputid + ''''''')' 
    EXEC (@TSQL) 
END 
+0

謝謝,但我認爲需要更多東西。經過一些閱讀後,我意識到我不想輸出參數;我想要一個來自SP的結果集。但是,上面似乎沒有實際產生結果集 - 當我以交互方式運行它時,它可以工作,但SSRS不會看到結果集,所以我不能分配這些字段。我嘗試聲明一個表@t並將TSQL更改爲「插入到@t select * from ...」,然後是「select * from @t」以生成結果集,但在SSRS執行時失敗,並且「必須聲明table variable @t「 –

0

應該沒有理由不能在運行交互時執行相同的查詢。你甚至不需要存儲過程來做到這一點。但是,SSRS帳戶可能沒有執行該命令的訪問權限。

我以前通過創建一個新的SQL Server登錄,授予正確的權限並使用該帳戶執行SQL語句(我真的開始給它完全訪問來證明它工作,然後刪除了不必要的訪問)。

例如,我創建了一個名爲AceDriverLogin的登錄名,用於在服務器上直接訪問Excel文件。

然後建立你的SQL語句(在你的情況下你已經在@TSQL中完成了這個)。然後使用以下語法執行語句。

EXEC (@TSQL) AS LOGIN= 'AceDriverLogin' 
+0

它確實執行成功問題似乎是SSRS無法檢測到形成的結果集如果我將EXEC(@TSQL)代碼行放到另一個存儲過程中並交互運行在SSMS中,我可以像預期的那樣在屏幕的下半部分得到結果集輸出。當我告訴SSRS使用該存儲過程生成報告時,它不能看到結果集,因爲如果出現「 select * from ...「語句,當我嘗試選擇要顯示的數據字段時,它會顯示」無字段「 –

+0

我現在有一個解決方法,但它很醜陋,如果我這樣做:」SELECT @TSQL ='truncate table ;插入到選擇*從OPENQUERY(...「然後II可以做」選擇*從「,我得到一個SSRS可以看到的結果集。顯然這不適用於有任何機會被兩個用戶,但在這種情況下,只有一個可能的用戶(在IT中),所以它應該沒問題,不過我不想投入生產,如果有人知道如何解決這個問題,我仍然希望聽到解。 –