从存储过程调用中exec sp_executecapture返回值和输出值



给定一个简单的存储过程,该过程填充了 OUTPUT参数,而 RETURN s a值,例如:

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

过程或函数'sp_test'期望参数'@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参数。

您在这里不需要sp_executesql,只是因为存储过程名称是动态的。

EXEC语法接受@module_name_var

您可以做

DECLARE @ret       INT,
        @param_out INT
DECLARE @procname SYSNAME = 'sp_test'
EXEC @ret = @procname
  @param_out OUTPUT 

@procname中名称的过程将被执行

最新更新