在另一个存储过程中未执行存储过程
问题描述:
我发现在执行SP1时,SP2不会从SP1内执行。在另一个存储过程中未执行存储过程
下面是SP1的结构:
ALTER PROCEDURE SP1 AS BEGIN
Declare c1 cursor....
open c1 fetch next from c1 ...
while @@fetch_status = 0 Begin
...
Fetch Next from c1 end
close c1
deallocate c1
exec sp2
end
我看到PRINT语句输出的非如果他们印在“输出窗口”在SQL Server 2005 Management Studio中的“输出窗口'是空的。
答
如果您将存储过程代码作为单个查询运行,会发生什么情况?如果在执行前后放置PRINT
语句,您是否看到两个输出?
- 如果你这样做,那么存储过程必须被执行。可能它没有做你想做的事。
- 如果你没有看到任何打印输出,那么有什么不对劲的周期
- 如果你没有看到第二个输出,但首先看到的,有什么不对的第二个存储过程。
答
我不知道,如果它可以帮助你,但是从我的经验中最流行的原因是:
-
sp2
得到了一些参数,这使得它null
价值 - 即你从字符串建立自己的名字其中之一是null
。 -
sp2
里面有一些条件,其中没有一个是真的,那么sp2
根本不执行任何代码 - 也就是其中的一个参数是类型varchar
,传递价值VALUE
,检查它里面,但真正的价值传递给sp2
是V
(因为没有定义varchar长度)。 -
sp2
从参数中建立查询,其中之一是null
,整个查询也变为null
。
你看到任何输出,如果你把PRINT
和之前之后通话sp2
?
答
您可以使用@@ error来查看执行前面的语句时是否有错误。
您可能想要避免抓取下一个。他们实际上效率并不高,并且会影响性能。 – 2008-10-04 14:55:23