我正在使用SQL Server 2008 Enterprise。我遇到了存儲過程foo的第9行會遇到死鎖問題的問題。我的問題是如何找到存儲過程的第9行?SQL Server存儲過程行號問題
我的困惑是因爲編碼格式問題,如何正確定位第9行。
由於事先 喬治
我正在使用SQL Server 2008 Enterprise。我遇到了存儲過程foo的第9行會遇到死鎖問題的問題。我的問題是如何找到存儲過程的第9行?SQL Server存儲過程行號問題
我的困惑是因爲編碼格式問題,如何正確定位第9行。
由於事先 喬治
這是一個從CREATE PROCEDURE語句9號線。 SQL語句通常是多行的,所以「第9行」將引用語句的第一行(例如INSERT或UPDATE)
但是,如果您在CREATE PROCEDURE之上有註釋或在它之前有空行,那麼您不能依靠這個...所以使用ALTER PROC作爲批處理中的第一行運行ALTER PROC。
1.所以,最可靠的方法是使用SQL Server Management Studio中的alter proc,然後計算行號? 2.我應該從SQL Server Management Studio生成的alter proc代碼中刪除商店過程之上的任何註釋嗎? – George2 2010-06-01 05:18:09
我的疑惑是關於上面的alter procedure的行是否會被計爲行號計數 - 「SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO」,以及如何處理存儲過程中的多行語句以處理行數量? – George2 2010-06-01 05:29:59
它是從CREATE PROC的第XX行 – gbn 2010-06-01 06:36:18
小費我從another answer了...
如果你
sp_helptext (proc name)
SQL將輸出CREATE PROCEDURE語句中的「記憶」版本,這是它得到它的行號從顯然。如果SSMS處於「網格輸出」模式,那麼它也會輸出行號(作爲結果集的行號)。
注意:在我的情況下,它是從CREATE PROCEDURE語句加上一堆註釋開始的,所以第一行約在CREATE PROCEDURE調用的上面6行。
對於'sp_helptext'。謝謝! – LeopardSkinPillBoxHat 2012-02-02 00:15:20
正如我的情況下,它是'sp_helptext proc_name'沒有parens。這些人可能是出於其他目的的例子,但是直到我把它們拿出來之前它並不適用於我。 +1雖然! – Shrout1 2013-05-21 15:13:31
sp_helptext
輸出的行號與您在錯誤消息中看到的行號完全不同。
例如,在我的存儲過程中出現錯誤,它表示錯誤發生在行號194上,但實際上,當我顯示sp_helptext
時,我的存儲過程只顯示了136行。順便說一下,我用SQL Server 2008.
我認爲你最好使用alter script重新運行你的SP,並確保alter procedure是上面的第一行並且沒有註釋等。那麼呈現的錯誤行數應該匹配。 – Christo 2013-07-03 15:22:58
馬克,你有什麼經驗來分享如何更準確地找到行號? – George2 2010-06-01 06:05:36