给出一个简单的存储过程,该过程将填充一个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
:
过程或函数'sp_test'需要未提供的参数'@param_out'。
答案 0 :(得分:5)
您还需要将两个值都作为MemberOf
参数传递到OUTPUT
:
sp_executesql
我必须问,为什么要这么做?此SQL没有动态变化,所以为什么要使用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;
?我也建议不要使用SP的返回值;您确实应该使用另一个sp_executesql
参数。
答案 1 :(得分:0)
您仅在此处不需要setValue(...)
就是因为存储过程名称是动态的。
EXEC
grammar接受sp_executesql
。
您可以
@module_name_var
,名称为DECLARE @ret INT,
@param_out INT
DECLARE @procname SYSNAME = 'sp_test'
EXEC @ret = @procname
@param_out OUTPUT
的过程将被执行