處理 Database Engine 錯誤

您可以透過程式設計的方式來擷取和解決 SQL Server Database Engine 引發的錯誤。Transact-SQL 語言及程式用來存取儲存於 Database Engine 中資料的資料存取應用程式開發介面 (API),都提供了錯誤處理能力。

可以在兩種層級處理 Database Engine 的錯誤:

  • 透過將錯誤處理程式碼新增到 Transact-SQL 批次、預存程序、觸發程序或使用者自訂函數,即可在 Database Engine 中處理錯誤。Transact-SQL 錯誤處理機制包括 TRY…CATCH 建構 (請參閱<TRY...CATCH (Transact-SQL)>)、RAISERROR 陳述式和 @@ERROR 函數。
  • 可將錯誤傳回呼叫的應用程式,並在應用程式碼中妥善處理。應用程式用來存取 Database Engine 的每個 API,所提供的機制可將錯誤資訊傳回應用程式。
主題 描述

瞭解 Database Engine 錯誤

每個 Database Engine 錯誤都包含下列屬性:錯誤號碼、訊息字串、嚴重性、狀態、程序名稱和行號。

在 Transact-SQL 中擷取錯誤資訊

Transact-SQL 程式碼可以使用 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE 和 @@ERROR 函數,來擷取錯誤的相關資訊。

在 Transact-SQL 中使用 TRY...CATCH

SQL Server 2005 導入在 Transact-SQL 程式碼中處理錯誤的能力,主要是使用類似於 Microsoft Visual C++ 和 Visual C# 語言之例外狀況處理功能的 TRY…CATCH 建構來進行的。在 TRY 區塊中偵測到錯誤狀況時,會將控制項傳遞至可以處理該錯誤的 CATCH 區塊。這是在 SQL Server 2005 Database Engine 中處理錯誤的主要機制。

使用 RAISERROR

可以使用 RAISERROR 陳述式來引發使用者自訂錯誤。也可以從 CATCH 區塊使用該陳述式,以繼續在 CATCH 區塊中處理的應用程式錯誤。

使用 PRINT

可以使用 PRINT 陳述式將使用者自訂的訊息傳回應用程式。

使用 @@ERROR

在舊版的 SQL Server 中,@@ERROR 函數是在 Transact-SQL 陳述式中偵測錯誤的主要方法。TRY…CATCH 建構則提供了改進的功能。

處理應用程式中的錯誤和訊息

每個資料存取 API (例如 ActiveX Data Objects (ADO)、OLE DB 和開放式資料庫連接 (Open Database Connectivity,ODBC)) 都擁有可將從 Database Engine 接收的所有錯誤資訊回報到應用程式的機制。

Database Engine 錯誤嚴重性

引發 Database Engine 錯誤和使用者自訂的錯誤訊息,其嚴重性為 1 到 25。sp_addmessage 和 RAISERROR 可以用來產生使用者自訂的錯誤訊息。

請參閱

其他資源

sys.messages (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助