1. 程式人生 > >SQL Server 異常處理機制(Begin try Begin Catch) 摘錄

SQL Server 異常處理機制(Begin try Begin Catch) 摘錄

RoCE nsa lan seve -- isa weight roc 錯誤信息

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) 摘錄