2008-10-04 159 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來查看執行前面的語句時是否有錯誤。

相關問題