我有一个存储过程,它返回了大约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