2008-10-04 158 views
3

我发现在执行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中的“输出窗口'是空的。

+0

您可能想要避免抓取下一个。他们实际上效率并不高,并且会影响性​​能。 – 2008-10-04 14:55:23

回答

3

如果您将存储过程代码作为单个查询运行,会发生什么情况?如果在执行前后放置PRINT语句,您是否看到两个输出?

  • 如果你这样做,那么存储过程必须被执行。可能它没有做你想做的事。
  • 如果你没有看到任何打印输出,那么有什么不对劲的周期
  • 如果你没有看到第二个输出,但首先看到的,有什么不对的第二个存储过程。
0

我不知道,如果它可以帮助你,但是从我的经验中最流行的原因是:

  1. sp2得到了一些参数,这使得它null价值 - 即你从字符串建立自己的名字其中之一是null
  2. sp2里面有一些条件,其中没有一个是真的,那么sp2根本不执行任何代码 - 也就是其中的一个参数是类型varchar,传递价值VALUE,检查它里面,但真正的价值传递给sp2V(因为没有定义varchar长度)。
  3. sp2从参数中建立查询,其中之一是null,整个查询也变为null

你看到任何输出,如果你把PRINT之前之后通话sp2

0

您可以使用@@ error来查看执行前面的语句时是否有错误。

相关问题