了解 Database Engine 錯誤

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲

下表描述 Microsoft SQL Server 資料庫引擎所引發錯誤的屬性。

屬性 描述
錯誤號碼 每一則錯誤訊息都有唯一的錯誤號碼。
錯誤訊息字串 錯誤訊息包含錯誤原因的診斷資訊。 許多錯誤訊息都有用來插入資訊 (例如產生錯誤的物件名稱) 的替代變數。
Severity 嚴重性指出錯誤的嚴重程度。 嚴重性低 (例如 1 或 2) 的錯誤是參考訊息或低階警告。 嚴重性高的錯誤指出應該儘快處理的問題。 如需有關嚴重性的詳細資訊,請參閱 Database Engine 錯誤嚴重性
State 某些錯誤訊息可能會在資料庫引擎程式碼中的多個點上引發。 例如,1105 錯誤可以因為許多不同情況而引發。 每個引發錯誤的特定條件會指派唯一的狀態碼。

檢視內含已知問題之資訊的資料庫時 (例如 Microsoft 知識庫),可以使用狀態碼來判斷所記錄的問題與您遇到的錯誤是否相同。 例如,如果知識庫文件描述狀態為 2 的 1105 錯誤,而您收到之 1105 錯誤訊息的狀態為 3,則錯誤原因可能不是文件中所報告的原因。

Microsoft 支援服務工程師也可以使用錯誤中的狀態碼,來找出原始程式碼中引發錯誤碼的位置。 這項資訊可能會提供如何診斷問題的其他想法。
程序名稱 這是發生錯誤之預存程序或觸發程序的名稱。
行號 指出批次、預存程序、觸發程序或函數中的哪個陳述式產生錯誤。

資料庫引擎執行個體中的所有系統和使用者自訂的錯誤訊息都包含在 sys.messages 目錄檢視中。 您可以使用 RAISERROR 陳述式,將使用者自訂的錯誤傳回給應用程式。

所有資料庫 API,例如 Microsoft .NET Framework SQLClient 命名空間、ActiveX Data Objects (ADO)、OLE DB 和開放式資料庫連線 (ODBC),都會報告基本錯誤屬性。 這項資訊包括錯誤號碼和訊息字串。 不過,並非所有 API 都會報告所有其他錯誤屬性。

您可以在 Transact-SQL 程式碼中,使用相關聯之 CATCH 區塊範圍內的 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE 等函式,來取得在 TRY...CATCH 建構的 TRY 區塊範圍內出現之錯誤的相關資訊。 如需詳細資訊,請參閱 TRY...CATCH (Transact-SQL)

範例

下列範例會查詢 sys.messages 目錄檢視,以傳回資料庫引擎中具有英文文字 (1033) 之所有系統和使用者自訂錯誤訊息的清單。

SELECT  
    message_id,  
    language_id,  
    severity,  
    is_event_logged,  
    text  
  FROM sys.messages  
  WHERE language_id = 1033;  

如需詳細資訊,請參閱 sys.messages (Transact-SQL)

另請參閱

sys.messages (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)