EXEC sp_executesql - 从存储过程调用中捕获 RETURN 值和 OUTPUT 值
EXEC sp_executesql - capture RETURN value and OUTPUT value from stored procedure call
给定一个简单的存储过程,它填充一个 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 的 return 值;你真的应该使用另一个 OUTPUT
参数。
这里不需要 sp_executesql
,因为存储过程名称是动态的。
EXEC
grammar接受@module_name_var
。
你可以
DECLARE @ret INT,
@param_out INT
DECLARE @procname SYSNAME = 'sp_test'
EXEC @ret = @procname
@param_out OUTPUT
将执行名称在@procname
中的过程
给定一个简单的存储过程,它填充一个 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 的 return 值;你真的应该使用另一个 OUTPUT
参数。
这里不需要 sp_executesql
,因为存储过程名称是动态的。
EXEC
grammar接受@module_name_var
。
你可以
DECLARE @ret INT,
@param_out INT
DECLARE @procname SYSNAME = 'sp_test'
EXEC @ret = @procname
@param_out OUTPUT
将执行名称在@procname
中的过程