选择存储过程返回的列

时间:2010-05-17 07:40:18

标签: sql sql-server-2005 tsql dynamic-sql

我有一个存储过程,它返回了大约50列。我想编写一个查询,在那里我将能够从SP返回的列列表中选择一个特定的列。

我尝试写select RSA_ID from exec(uspRisksEditSelect '1')但它给我一个错误。 我想我们需要为它编写一些动态的sql。但我是新手。

3 个答案:

答案 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

在这种情况下,您无需手动创建临时表 - 它会自动创建。希望这会有所帮助。