본문 바로가기

프로그래밍/MSSQL 정리필요

[DB_MSSQL] TRY CATCH / ERROR / XACT_STATE (오류 처리)

반응형

TRY CATCH을 이용하여 오류를 처리해보자



BEGIN
    SET NOCOUNT ON;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 
    BEGIN TRY
        BEGIN TRAN
 
        /* 쿼리 작업 */
 
        SELECT '성공'
        COMMIT TRAN;
 
    END TRY
    BEGIN CATCH
    
        DECLARE @ErrorNumber    INT
        DECLARE @ErrorSeverity  INT
        DECLARE @ErrorState     INT
        DECLARE @ErrorProcedure NVARCHAR(MAX)
        DECLARE @ErrorLine      INT
        DECLARE @ErrorMessage   NVARCHAR(MAX)
 
        SELECT  @ErrorNumber    = ERROR_NUMBER(),   -- 오류 번호
                @ErrorSeverity  = ERROR_SEVERITY(), -- 오류 심각도
                @ErrorState     = ERROR_STATE(),    -- 오류 상태 번호
                @ErrorProcedure = ERROR_PROCEDURE(),-- 오류 발생 프로시저
                @ErrorLine      = ERROR_LINE(),     -- 오류 발생 행 번호
                @ErrorMessage   = ERROR_MESSAGE();  -- 오류 메세지
 
        SELECT '에러발생'
        IF XACT_STATE() <> 0 ROLLBACK TRAN;
 
    END CATCH
 
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
END

쿼리 실행 중 에러 없이 정상 실행시

TRY안에서 COMMIT TRAN과 함께 쿼리가 성공적으로 실행된다.


그러나 쿼리 실행 중 에러가 발생한다면,

CATCH로 빠지게 되고, 해당 에러를 파악 후 ROLLBACK TRAN으로 해당 쿼리를 롤백시킨다.



XACT_STATE()

1 : 활성상태의 커밋 가능한 트랜잭션 존재

-1 : 활성상태의 커밋 불가능한 트랜잭션 존재

0 : 비 활성 트랜잭션



에러 메세지 예)



반응형