處理 Database Engine 錯誤
您可以透過程式設計的方式來擷取和解決 SQL Server Database Engine 引發的錯誤。Transact-SQL 語言及程式用來存取儲存於 Database Engine 中資料的資料存取應用程式發展介面 (API),都提供了錯誤處理能力。
可以在兩種層級處理 Database Engine 的錯誤:
透過將錯誤處理程式碼新增到 Transact-SQL 批次、預存程序、觸發程序或使用者自訂函數,即可在 Database Engine 中處理錯誤。
可將錯誤傳回呼叫的應用程式,並在應用程式碼中妥善處理。應用程式用來存取 Database Engine 的每個 API,所提供的機制可將錯誤資訊傳回應用程式。
主題 |
描述 |
---|---|
每個 Database Engine 錯誤都包含下列屬性:錯誤號碼、訊息字串、嚴重性、狀態、程序名稱和行號。 |
|
Transact-SQL 程式碼可以使用 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE 和 @@ERROR 函數,來擷取錯誤的相關資訊。 |
|
可使用 TRY...CATCH 建構來處理 Transact-SQL 程式碼中的錯誤,這個建構類似於 Microsoft Visual C++ 和 Visual C# 語言的例外狀況處理功能。在 TRY 區塊中偵測到錯誤狀況時,會將控制項傳遞至可以處理該錯誤的 CATCH 區塊。 |
|
可使用 TRY...CATCH 建構來處理 Transact-SQL 程式碼中的錯誤,這個建構類似於 Microsoft Visual C++ 和 Visual C# 語言的例外狀況處理功能。在 TRY 區塊中偵測到錯誤狀況時,會將控制項傳遞至可以處理該錯誤的 CATCH 區塊。 |
|
可以使用 RAISERROR 陳述式來引發使用者自訂錯誤。也可以從 CATCH 區塊使用該陳述式,以繼續在 CATCH 區塊中處理的應用程式錯誤。 |
|
可以使用 PRINT 陳述式將使用者自訂的訊息傳回應用程式。 |
|
在舊版的 SQL Server 中,@@ERROR 函數是在 Transact-SQL 陳述式中偵測錯誤的主要方法。TRY…CATCH 建構則提供了改進的功能。 |
|
每個資料存取 API (例如 ActiveX Data Objects (ADO)、OLE DB 和開放式資料庫連接 (Open Database Connectivity,ODBC)) 都擁有可將從 Database Engine 接收的所有錯誤資訊回報到應用程式的機制。 |
|
引發 Database Engine 錯誤和使用者自訂的錯誤訊息,其嚴重性為 1 到 25。sp_addmessage 和 RAISERROR 可以用來產生使用者自訂的錯誤訊息。 |