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

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





댓글 없음:

댓글 쓰기

javascript - SQL 예약어 제거

  <script language="javascript"> //특수문자, 특정문자열(sql예약어) 제거 function checkSearchedWord(obj){ obj.value = obj.value+&quo...