找不到存储过程'exec _bspWhUtilAddAllStkToWh 2'

时间:2018-09-05 13:43:00

标签: sql-server tsql

我已经开发了以下脚本:

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',但是我仍然收到相同的错误。

我想念什么?

1 个答案:

答案 0 :(得分:2)

理想情况下,您应该不惜一切代价避免循环。在您的情况下,我会考虑将过程更改为接收表值函数,以便您可以接收整个Warehouse Links集合,并对整个过程执行过程中的所有操作。但是假设您无法执行此操作,则可以在此处使用游标,而忘记了动态sql,因为它不是必需的。

类似这样的事情要简单得多。

declare @WarehouseLink int
declare Warehouses cursor local fast_forward 
for
    select WhseLink 
    from WhseMst

fetch next from Warehouses into @WarehouseLink

while @@FETCH_STATUS = 0 
begin
    exec _bspWhUtilAddAllStkToWh @WarehouseLink

    fetch next from Warehouses into @WarehouseLink
end