我正在尝试使用sp_executesql
但在另一个存储过程中调用存储过程(带有输出变量)。我写了以下内容,但仍然无法理解该错误的含义
这将从 web 服务代码中调用:
exec sp1 'obj1',@params
这里obj
和params
是nvarchar(max)
的定义sp1
是:
Alter procedure [dbo].[sp1 ]
@procname nvarchar(max),
@params nvarchar(max)
as
declare @temp varchar(15)
if @procname = 'obj1'
begin
set @params = @params + ',@Newval varchar(15) output'
EXEC sp_executesql @sp2,@params,@Newval=@temp OUTPUT
end
的定义sp2
:
我在这里返回@Newval
我得到的错误:
消息 102,级别 15,状态 1,第 1 行
',' 附近的语法不正确。
同样在 2 中代替exec
statement ,我尝试了以下操作:
EXEC sp_executesql @sp2, @params, @temp OUTPUT;
导致同样的错误。
set @sql='sp2,' + ' @params ' + ',@params,@temp OUTPUT'
EXEC sp_executesql (@sql)
也会导致同样的错误。
我需要在 sp1 中动态选择存储过程,params 是nvarchar(max)
一串参数及其值,其中一些是 varchar 并以“值”格式嵌入,但这个字符串很好,因为我可以调用底层 sp2有了这个。
附加信息,它有帮助。
EXEC sp_executesql @sp2,@params,@Newval=@temp OUTPUT
在此@params 中是最终 sp 的键和 vlaue 对的组合。像:
'@key1="a",@key2="b"'
等等,我无法预定义@params,但它是动态的,当我运行它时它工作正常
exec (@sql)
格式,而整个名称,参数嵌入在@sql中