2010-05-17 85 views
3

我有一個存儲過程,它返回了大約50列。我想寫一個查詢,在那裏我可以從SP返回的列列表中選擇一個特定的列。選擇一個存儲過程返回的列

我試過寫select RSA_ID from exec(uspRisksEditSelect '1')但它給我一個錯誤。 我認爲我們需要爲它編寫一些動態sql。但我對它很陌生。

+1

這是拋出一個錯誤 - 照顧分享這個錯誤? – Oded 2010-05-17 07:41:53

+0

exec(uspRisksEditSelect,'1')是否返回單個值或表? – 2010-05-17 07:48:01

回答

6

不能直接使用存儲過程的結果 - 你需要存儲到內存或臨時表,並從那裏:

DECLARE @tableVar TABLE (ID INT, Name VARCHAR(50)) -- whatever your sp returns 

INSERT INTO @tableVar 
    EXEC uspRisksEditSelect '1' 

SELECT RSA_ID FROM @tableVar 

但絕對沒有必要使用動態SQL。 ....

+1

這是否適用於嵌套EXEC調用的存儲過程?例如:msdb.dbo.sp_help_job – MarmiK 2014-01-24 12:27:15

3

你應該寫一個表值用戶函數。

+0

這應該是OP的評論,因爲它沒有回答這個問題。有可能您的建議不是一種選擇。如果他/不能/創建TVF會怎麼樣? – 2014-04-04 00:15:46

0

如果你可以修改你的存儲過程,你可以很容易地把需要的列數爲參數:

CREATE PROCEDURE sp_GetDiffDataExample 
     @columnsStatement NVARCHAR(MAX) -- Needed columns 
AS 
BEGIN 
    DECLARE @query NVARCHAR(MAX) 
    SET @query = N'SELECT ' + @columnsStatement + N' INTO ##TempTable FROM dbo.TestTable' 
    EXEC sp_executeSql @query 
    SELECT * FROM ##TempTable 
    DROP TABLE ##TempTable 
END 

在這種情況下,你並不需要創建ŧ emp表手動 - 它會自動創建。希望這可以幫助。