適用於:SQL Server
當 SQL Server 資料庫引擎產生錯誤時,錯誤的嚴重性會指出 SQL Server 所遇到的問題類型。
嚴重性層級
下表列出和描述 SQL Server 資料庫引擎所產生錯誤的嚴重性層級。
| 嚴重性層級 | 描述 |
|---|---|
| 0-9 | 指出傳回狀態資訊或報告不嚴重錯誤的資訊訊息。 資料庫引擎不會產生嚴重性 0-9 的系統錯誤。 |
| 10 | 指出傳回狀態資訊或報告不嚴重錯誤的資訊訊息。 基於相容性考量,資料庫引擎會先將嚴重性 10 轉換成嚴重性 0,再將錯誤資訊傳回給發出呼叫的應用程式。 |
| 11-16 | 指出使用者能夠更正的錯誤。 |
| 11 | 指出給定的物件或實體不存在。 |
| 12 | 因特殊查詢提示而不使用鎖定之查詢的特殊嚴重性。 在某些情況下,這些陳述式所執行的讀取作業可能會導致資料不一致,因為不會採用鎖定來保證一致性。 |
| 13 | 指出交易死結錯誤。 |
| 14 | 指出與安全性相關的錯誤,例如,沒有權限。 |
| 15 | 指出 Transact-SQL 命令的語法錯誤。 |
| 16 | 指出使用者能夠更正的一般錯誤。 |
| 17-19 | 指出使用者無法更正的軟體錯誤。 請通知系統管理員這個問題。 |
| 17 | 指出陳述式使 SQL Server 將資源 (如記憶體、鎖定,或資料庫的磁碟空間) 用完,或超出系統管理員所設定的某項限制。 |
| 18 | 表示資料庫引擎軟體發生問題,但陳述式仍能完成執行,並保持與資料庫引擎實例的連線。 每當出現嚴重性層級 18 的訊息時,都應該通知系統管理員。 |
| 19 | 指出超出不可設定的資料庫引擎限制,已終止目前的批次處理序。 嚴重性層級 19 或以上的錯誤訊息,會停止執行目前的批次。 嚴重性層級 19 的錯誤很少,必須由系統管理員或主要支援提供者來更正。 當出現嚴重性層級 19 的訊息時,請連絡您的系統管理員。 嚴重性層級 19-25 的錯誤訊息會寫入錯誤記錄中。 |
| 20-24 | 指出系統問題和致命錯誤,這表示執行陳述式或批次的資料庫引擎作業已中止。 工作會將發生情況的相關資訊記錄下來,再終止作業。 在大部分情況下,與資料庫引擎執行個體的應用程式連線也可能會終止。 如果發生,視問題而定,應用程式可能無法重新連線。 此範圍內的錯誤訊息可能會影響存取資料庫中資料的所有處理程序,並可能指出資料庫或物件已損壞。 嚴重性層級 19-24 的錯誤訊息會寫入錯誤記錄中。 |
| 20 | 指示陳述遇到問題。 因為問題只影響目前的工作,所以資料庫本身不太可能損壞。 |
| 21 | 表示遇到影響目前資料庫中所有工作的問題,但資料庫本身不太可能損壞。 |
| 22 | 指出軟體或硬體問題已損毀訊息所指定的資料表或索引。 嚴重性層級 22 的錯誤很少發生。 如果發生,請執行 DBCC CHECKDB 來判斷資料庫中的其他物件是否也已損毀。 可能只有緩衝快取發生問題,磁碟本身並沒有問題。 若是如此,重新啟動資料庫引擎執行個體便可以更正這個問題。 若要繼續工作,您必須重新連線到資料庫引擎的執行個體。 否則,請使用 DBCC 來修復問題。 在某些情況下,您可能必須還原資料庫。如果重新啟動資料庫引擎的執行個體無法修正問題,則問題出在磁碟上。 有時,銷毀錯誤訊息中指定的物件可以解決問題。 例如,如果訊息報告資料庫引擎執行個體在非叢集索引中找到長度是 0 的資料列,請刪除這個索引,再重建它。 |
| 23 | 指出由於硬體或軟體發生問題,因此,整個資料庫的完整性有問題。 嚴重性層級 23 的錯誤很少發生。 如果發生,請執行 DBCC CHECKDB 來判斷損毀的範圍。 可能只有快取發生問題,磁碟本身並沒有問題。 若是如此,重新啟動資料庫引擎執行個體便可以更正這個問題。 若要繼續工作,您必須重新連線到資料庫引擎的執行個體。 否則,請使用DBCC來修復問題。 在某些情況下,您可能需要還原資料庫。 |
| 24 | 指出媒體失敗。 系統管理者可能需要還原資料庫。 您可能還需要致電您的硬體供應商。 |
使用者自訂的錯誤訊息嚴重性
您可以使用 sp_addmessage,將嚴重性 1-25 的使用者自訂錯誤訊息加入 sys.messages 目錄檢視中。
RAISERROR 可以使用這些使用者自訂的錯誤訊息。 如需詳細資訊,請參閱 sp_addmessage。
RAISERROR 可以用來產生使用者定義的錯誤訊息,其嚴重性為 1 到 25。
RAISERROR 可以參考儲存在 sys.messages 目錄檢視的使用者定義錯誤訊息,或是動態建立訊息。 當 RAISERROR 在sys.messages中使用用戶定義的錯誤訊息產生錯誤時,RAISERROR 指定的嚴重性會置換 sys.messages 中指定的嚴重性。 如需詳細資訊,請參閱 RAISERROR。
錯誤嚴重性和 TRY...CATCH
一個 TRY...CATCH 構造會攔截所有執行錯誤,其嚴重性大於 10 且不會終止資料庫連線。
嚴重性從 0 到 10 的錯誤是資訊性訊息,不會導致執行離開 TRY...CATCH 構造中的 CATCH 區塊。
終止資料庫連線的錯誤 (嚴重性通常為 20 到 25) 不會由 CATCH 區塊處理,因為連線終止時會中止執行。
如需詳細資訊,請參閱 TRY...CATCH。
擷取錯誤嚴重性
ERROR_SEVERITY 系統函式可以用來擷取導致 CATCH 區塊中的 TRY...CATCH 結構運行之錯誤的嚴重性。
ERROR_SEVERITY如果在區塊範圍NULL之外呼叫,則會傳回CATCH。 如需詳細資訊,請參閱 ERROR_SEVERITY。