Sql-Server

MS SQL Server 2014:我的錯誤在哪個儲存過程中?

  • April 13, 2021

作為 Microsoft SQL Server 2014 上的一個或三個一般性問題,也許我應該已經知道答案,甚至可能曾經知道 -

當我的儲存過程執行其他儲存過程時,如何找出哪個儲存過程的程式碼產生了錯誤?

是否有一種特殊的方法來處理來自 Transact-SQL 的錯誤,以辨識給定儲存過程中錯誤的位置?

儲存過程中的程式碼可以獲取它所在的過程的名稱嗎?

如果這是唯一的方法,我準備將“SET @MyNameIs = N’HastilyWrittenProcedure’”放入程式碼中。然後我可以輸入“PRINT @MyNameIs + ’ 壞了。” " 在所有的錯誤處理程序中。

使用@@procid獲取目前執行的常式並使用object_name() 將id 轉換為名稱

Hth

當我的儲存過程執行其他儲存過程時,如何找出哪個儲存過程的程式碼產生了錯誤?

在您的 CATCH 塊中,您可以使用ERROR_PROCEDURE()來獲取發生錯誤的過程或觸發器的名稱。

如果您只是在內部過程的 CATCH 塊中使用 THROW,那麼您的外部過程可以訪問這些系統函式(ERROR_PROCEDURE()、ERROR_LINE() 等)以在外部過程的 CATCH 塊中檢索有關內部過程失敗的資訊。

是否有一種特殊的方法來處理來自 Transact-SQL 的錯誤,以辨識給定儲存過程中錯誤的位置?

在您的 CATCH 塊中,您可以使用ERROR_LINE()來獲取發生錯誤的過程或觸發器的名稱。

儲存過程中的程式碼可以獲取它所在的過程的名稱嗎?

使用此程式碼:SELECT OBJECT_NAME(@@PROCID)獲取過程本身內部的過程名稱。

這是在嵌套過程場景中使用的範例

引用自:https://dba.stackexchange.com/questions/289696