SQL Server提供了在T-SQL 代碼中用於處理錯誤的工具。進行錯誤處理的主要工具是一種稱爲TRY...CATCH的結構,它是在SQL Server 2005中引入的。SQL Server 也提供了一組函數,調用它們能夠得到有關錯誤的信息。函數
當使用 TRY...CATCH結構時,一般是把T-SQL 代碼放在TRY塊中(放在BEGIN TRY 和END TRY關鍵字之間),而把錯誤處理代碼放在緊接其後的CATCH 塊中(放在BEGIN CATCH 和END CATCH關鍵字之間)。若是TRY 塊中的代碼沒有錯誤,SQL Server 就會簡單地忽略CATCH 塊。若是TRY 塊發生了錯誤,流程控制就會轉移到相應的CATCH塊。注意,若是TRY...CATCH塊捕獲並處理了錯誤,則對於調用者來講,它不會看到有錯誤發生。工具
BEGIN TRYerror
PRINT ' No error';查詢
END TRY存儲過程
BEGIN CATCH消息
PRINT 'Error';錯誤
END CATCHmessage
一般,在CATCH 塊中進行的錯誤處理會涉及檢查致使錯誤的緣由,採起某種處理操做。SQL Server能夠經過一組函數來反饋有關錯誤的信息。ERROR_NUMBER 函數將返回一個整數,表明錯誤的錯誤號,這可能算是最重要的一個錯誤函數。CATCH 塊一般包含一些流程控制代碼,經過檢查錯誤號來決定應該採起什麼處理操做。ERROR_MESSAGE 函數將返回錯誤的消息文本。要獲得錯誤號和錯誤消息的列表,能夠查詢sys.messages目錄視圖。ERROR_SEVERITY 和ERROR_STATE 函數能夠分別返回錯誤的嚴重級別和狀態號。ERROR_LINE函數能夠返回發生錯誤的行號。最後,ERROR_PROCEDURE 函數能夠返回發生錯誤的存儲過程或觸發器的名稱;若是在過程當中沒有發生錯誤,則返回NULL。