如何在存储过程中使用 SP_EXECUTESQL 从查询中返回值

Pas*_*per 2 sql-server stored-procedures t-sql

我有一个存储过程,它生成一个查询字符串,然后执行它

EXECUTE SP_EXECUTESQL @Query
Run Code Online (Sandbox Code Playgroud)

例如,查询是:Select Name, Age from tableA,非常简单。

但是如何从SP_EXECUTESQL(到变量中?)获取结果集,然后在我的存储过程中将其作为结果集返回?

Sco*_*red 8

您可以使用表变量来保存动态 SQL 调用的结果,直到您准备好退出存储过程。在从存储过程返回之前,从表变量中选择数据。

DROP PROCEDURE IF EXISTS dbo.MyProc;
GO
CREATE PROCEDURE dbo.MyProc
AS
BEGIN
    --Declare Table variable to hold results of query
    DECLARE @Results TABLE (ResultText VARCHAR(500));
    DECLARE @Query NVARCHAR(30);

    --This is the query
    SET @Query = 'select @@version'

    --Insert the results of the dynamic SQL execution into the table variable
    INSERT INTO @Results
    EXECUTE SP_EXECUTESQL @Query

    --Do more stored procedure logic

    --Finally, select the results of the table variable
    SELECT *
    FROM @Results
END
go
EXEC dbo.MyProc
Run Code Online (Sandbox Code Playgroud)