我有一个存储过程,它返回了大约50列。我想编写一个查询,在那里我将能够从SP返回的列列表中选择一个特定的列。
我尝试写select RSA_ID from exec(uspRisksEditSelect '1')
但它给我一个错误。
我想我们需要为它编写一些动态的sql。但我是新手。
答案 0 :(得分: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 :(得分:3)
您应该编写一个表值用户函数。
答案 2 :(得分: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
在这种情况下,您无需手动创建临时表 - 它会自动创建。希望这会有所帮助。