2022년 1월 5일 수요일

MSSQL - BEGIN TRY, BEGIN TRANSACTION, XACT_STATE()

 


------------------------------------------------------------------------------------------

-- XACT_STATE() 체크 권장

------------------------------------------------------------------------------------------

SET XACT_ABORT ON;  

  

BEGIN TRY  

    BEGIN TRANSACTION;  

-- 처리해야 할 쿼리

    COMMIT TRANSACTION;  

END TRY


BEGIN CATCH  

    IF (XACT_STATE()) = -1  

    BEGIN  

        ROLLBACK TRANSACTION;  

    END

ELSE IF (XACT_STATE()) = 1  

    BEGIN  

        COMMIT TRANSACTION;     

    END;  

END CATCH;  


1. XACT_STATE() 함수가 -1을 반환했다면 트랜젝션이 커밋(commit) 할 수 없는 상태로 "Rollback Transaction" 문을 실행해야 한다.

2. XACT_STATE() 함수가 1을 반환했다면 트랜젝션이 커밋할 수 있는 상태로 "Commit Transaction" 문을 실행해야 한다. 

3. XACT_STATE() 함수가 0을 반환했다면 트랜젝션이 없다는 것으로 어떤 조치도 취할 필요가 없다. 

------------------------------------------------------------------------------------------



------------------------------------------------------------------------------------------

-- @@ERROR 경우 최종 쿼리문의 성공 여부에 따라 값이 변경되는 문제가 있음

------------------------------------------------------------------------------------------

IF @@ERROR = 0

BEGIN

COMMIT TRAN;

END

ELSE 

BEGIN

ROLLBACK TRAN;

END

------------------------------------------------------------------------------------------





댓글 없음:

댓글 쓰기

MSSQL - Cursor vs Temp Table

#테이블 변수사용의 예 use pubs go declare @tmptable table (     nid int identity(1,1) not null,     title varchar (80) not null ) -- 테이블 변수 선언 inse...