共用方式為


了解 Database Engine 錯誤

下表描述 Microsoft SQL Server Database Engine 所引發之錯誤的屬性。

屬性

說明

錯誤號碼

每一則錯誤訊息都有唯一的錯誤號碼。

錯誤訊息字串

錯誤訊息包含錯誤原因的診斷資訊。 許多錯誤訊息都有用來插入資訊 (例如產生錯誤的物件名稱) 的替代變數。

嚴重性

嚴重性指出錯誤的嚴重程度。 嚴重性低 (例如 1 或 2) 的錯誤是參考訊息或低階警告。 嚴重性高的錯誤指出應該儘快處理的問題。 如需有關嚴重性的詳細資訊,請參閱<Database Engine 錯誤嚴重性>。

狀態

對於 Database Engine,程式碼的多個點都可能會產生某些錯誤訊息。 例如,在許多不同情況下,都有可能產生 1105 錯誤。 每個產生錯誤的特定狀況,都會指派唯一的狀態碼。

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

Microsoft 支援工程師也可以使用錯誤中的狀態碼,來找出原始程式碼中引發錯誤碼的位置。 這項資訊可能會提供如何診斷問題的其他想法。

程序名稱

這是發生錯誤之預存程序或觸發程序的名稱。

行號

指出批次、預存程序、觸發程序或函數中的哪個陳述式產生錯誤。

Database Engine 執行個體中的所有系統和使用者自訂的錯誤訊息都包含在 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 目錄檢視,以傳回 Database Engine 中具有英文文字 (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)