了解 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)>。