【发布时间】:2018-09-05 13:42:59
【问题描述】:
我开发了以下脚本:
declare @query nvarchar(1000)
declare @Loop int
declare @Whse table
( ID int identity primary key
, WhseLink int)
insert into @Whse
( WhseLink )
select WhseLink from WhseMst
select @Loop = min(ID) from @Whse
while @Loop is not null
begin
set @query = 'exec _bspWhUtilAddAllStkToWh('+cast((select WhseLink from @Whse where ID = @Loop) as varchar)+')'
exec @query
select @Loop = min(ID) from @Whse where ID>@Loop
end
基于上述,我得到以下错误:
找不到存储过程'exec _bspWhUtilAddAllStkToWh 2'
我检查了以下Link,用户也遇到了同样的问题,但我认为这个与那个不同,因为存储过程实际上存在并且当我单独运行相同的脚本时,它有效。
我尝试添加方括号,使@query 最终看起来像这样:'exec (_bspWhUtilAddAllStkToWh) 2',但我仍然收到相同的错误。
我错过了什么?
【问题讨论】:
-
您是否需要在 proc 名称前加上数据库名称?
-
exec (@query)? -
哇!我没有想到。现在可以了!谢谢蜜獾!
-
您可以使用
sp_executesql将参数值传递给存储过程,无需字符串连接 -
你为什么首先使用动态sql?这里完全没有必要。而且您应该始终指定 varchars 的长度。 sqlblog.org/2009/10/09/…
标签: sql-server tsql