给定一个简单的存储过程,该过程将填充OUTPUT参数,并填充RETURN的值,例如:

CREATE PROCEDURE sp_test
(
    @param_out INT OUTPUT
)
AS BEGIN
    SELECT @param_out = 9
    RETURN 2
END

如何使用sp_executesql调用此过程并捕获这两个值?

我试过了:
DECLARE @ret INT, @param_out INT
EXEC SP_EXECUTESQL N'EXEC @ret = sp_test',
    N'@ret INT OUTPUT, @param_out INT OUTPUT',
    @ret OUTPUT,
    @param_out OUTPUT

SELECT @ret, @param_out

但是,这抱怨没有提供@param_out:

最佳答案

您还需要将这两个值作为OUTPUT参数传递给sp_executesql:

DECLARE @ret int,
        @param_out int;
EXEC sp_executesql N'EXEC @ret = sp_test @param_out OUT;',
                   N'@ret INT OUTPUT, @param_out INT OUTPUT',
                   @ret OUTPUT,
                   @param_out OUTPUT;

SELECT @ret,
       @param_out;

我必须问,为什么要这么做?此SQL没有动态变化,所以为什么要使用sp_executesql?我也建议不要使用SP的返回值。您确实应该使用另一个OUTPUT参数。

关于sql - EXEC sp_executesql-从存储过程调用中捕获RETURN值和OUTPUT值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55181470/

10-13 07:46