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