sql - EXEC sp_executesql - 从存储过程调用中捕获 RETURN 值和 OUTPUT 值

标签 sql sql-server sp-executesql

给定一个简单的存储过程,它填充一个 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:

Procedure or function 'sp_test' expects parameter '@param_out', which was not supplied.

最佳答案

您还需要将这两个值作为 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/

相关文章:

sql - T-SQL 中数字类型的优先级

java - 如何使用 SQLiteDatabase 插入方法添加多列?

sql-server - 即使循环中发生错误如何继续游标循环

sql-server - 计数记录,除了超过 'N' 的连续值

sql - EXEC sp_executesql 与 INSERT INTO :( 一起使用时非常慢

mysql - 统计表中出现的次数 (MySQL)

SQL Server : How to change name in a view?

sql - 将用户定义的表参数传递给动态 sql sp_executesql

Azure SQL sp_execute_remote 不支持输出参数

sql - 将转储文件上传到 PostgreSQL