SQL Server 異常處理機制(Begin try Begin Catch) 摘錄
begin try --SQL end try begin catch --sql (處理出錯動作) end catch
我們將可能會出錯的sql 寫在begin try...end try 之間,若出錯,剛程序就跳到緊接著的begin try...end try 的beign catch...end catch中,執行beign catch...end catch錯誤處理SQL。try..catch 是可以嵌套的。在begin catch ...end catch中我們可以利用系統提供的下面四個函數得到出錯信息:
error_number 返回錯誤代碼
error_serverity 返回錯誤的嚴重級別
error_state 返回錯誤狀態代碼
error_message 返回完整的錯誤信息
上面的四個函數在同一個begin catch ...end catch可以在多次使用,值是不變的。
下面是一個簡單的小例子。
begin try select 2/0 end try begin catch select error_number() as error_number , error_message() as error_message, error_state() as error_state, error_severity() as error_severity end catch
結果:
-----
error_number error_message error_state error_severity
8134 遇到以零作除數錯誤。 1 16
-------------------------------------------------------
不受 TRY…CATCH 構造影響的錯誤
TRY…CATCH 構造在下列情況下不捕獲錯誤:
嚴重級別為 10 或更低的警告或信息性消息。
嚴重級別為 20 或更高且終止會話的 SQL Server 數據庫引擎任務處理的錯誤。 如果所發生錯誤的嚴重級別為 20 或更高,而數據庫連接未中斷,則 TRY…CATCH 將處理該錯誤。
需要關註的消息,如客戶端中斷請求或客戶端連接中斷。
當系統管理員使用 KILL 語句終止會話時。
USE AdventureWorks; GO BEGIN TRY -- Generate a divide-by-zero error. SELECT 1/0; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE()AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO
USE AdventureWorks; GO BEGIN TRANSACTION; BEGIN TRY -- Generate a constraint violation error. DELETE FROM Production.Product WHERE ProductID = 980; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() as ErrorState, ERROR_PROCEDURE() as ErrorProcedure, ERROR_LINE() as ErrorLine, ERROR_MESSAGE() as ErrorMessage; IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; END CATCH; IF @@TRANCOUNT > 0 COMMIT TRANSACTION; GO
源文:
https://blog.csdn.net/hejisan/article/details/52651660
SQL Server 異常處理機制(Begin try Begin Catch) 摘錄