我有一個存儲過程,它返回了大約50列。我想寫一個查詢,在那裏我可以從SP返回的列列表中選擇一個特定的列。選擇一個存儲過程返回的列
我試過寫select RSA_ID from exec(uspRisksEditSelect '1')
但它給我一個錯誤。 我認爲我們需要爲它編寫一些動態sql。但我對它很陌生。
我有一個存儲過程,它返回了大約50列。我想寫一個查詢,在那裏我可以從SP返回的列列表中選擇一個特定的列。選擇一個存儲過程返回的列
我試過寫select RSA_ID from exec(uspRisksEditSelect '1')
但它給我一個錯誤。 我認爲我們需要爲它編寫一些動態sql。但我對它很陌生。
不能直接使用存儲過程的結果 - 你需要存儲到內存或臨時表,並從那裏:
DECLARE @tableVar TABLE (ID INT, Name VARCHAR(50)) -- whatever your sp returns
INSERT INTO @tableVar
EXEC uspRisksEditSelect '1'
SELECT RSA_ID FROM @tableVar
但絕對沒有必要使用動態SQL。 ....
這是否適用於嵌套EXEC調用的存儲過程?例如:msdb.dbo.sp_help_job – MarmiK 2014-01-24 12:27:15
你應該寫一個表值用戶函數。
這應該是OP的評論,因爲它沒有回答這個問題。有可能您的建議不是一種選擇。如果他/不能/創建TVF會怎麼樣? – 2014-04-04 00:15:46
如果你可以修改你的存儲過程,你可以很容易地把需要的列數爲參數:
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表手動 - 它會自動創建。希望這可以幫助。
這是拋出一個錯誤 - 照顧分享這個錯誤? – Oded 2010-05-17 07:41:53
exec(uspRisksEditSelect,'1')是否返回單個值或表? – 2010-05-17 07:48:01