2010-06-01 187 views
10

我正在使用SQL Server 2008 Enterprise。我遇到了存儲過程foo的第9行會遇到死鎖問題的問題。我的問題是如何找到存儲過程的第9行?SQL Server存儲過程行號問題

我的困惑是因爲編碼格式問題,如何正確定位第9行。

由於事先 喬治

+1

馬克,你有什麼經驗來分享如何更準確地找到行號? – George2 2010-06-01 06:05:36

回答

5

這是一個從CREATE PROCEDURE語句9號線。 SQL語句通常是多行的,所以「第9行」將引用語句的第一行(例如INSERT或UPDATE)

但是,如果您在CREATE PROCEDURE之上有註釋或在它之前有空行,那麼您不能依靠這個...所以使用ALTER PROC作爲批處理中的第一行運行ALTER PROC。

+0

1.所以,最可靠的方法是使用SQL Server Management Studio中的alter proc,然後計算行號? 2.我應該從SQL Server Management Studio生成的alter proc代碼中刪除商店過程之上的任何註釋嗎? – George2 2010-06-01 05:18:09

+0

我的疑惑是關於上面的alter procedure的行是否會被計爲行號計數 - 「SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO」,以及如何處理存儲過程中的多行語句以處理行數量? – George2 2010-06-01 05:29:59

+1

它是從CREATE PROC的第XX行 – gbn 2010-06-01 06:36:18

12

小費我從another answer了...

如果你

sp_helptext (proc name) 

SQL將輸出CREATE PROCEDURE語句中的「記憶」版本,這是它得到它的行號從顯然。如果SSMS處於「網格輸出」模式,那麼它也會輸出行號(作爲結果集的行號)。

注意:在我的情況下,它是從CREATE PROCEDURE語句加上一堆註釋開始的,所以第一行約在CREATE PROCEDURE調用的上面6行。

+0

對於'sp_helptext'。謝謝! – LeopardSkinPillBoxHat 2012-02-02 00:15:20

+2

正如我的情況下,它是'sp_helptext proc_name'沒有parens。這些人可能是出於其他目的的例子,但是直到我把它們拿出來之前它並不適用於我。 +1雖然! – Shrout1 2013-05-21 15:13:31

4

sp_helptext輸出的行號與您在錯誤消息中看到的行號完全不同。

例如,在我的存儲過程中出現錯誤,它表示錯誤發生在行號194上,但實際上,當我顯示sp_helptext時,我的存儲過程只顯示了136行。順便說一下,我用SQL Server 2008.

+1

我認爲你最好使用alter script重新運行你的SP,並確保alter procedure是上面的第一行並且沒有註釋等。那麼呈現的錯誤行數應該匹配。 – Christo 2013-07-03 15:22:58