------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
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
------------------------------------------------------------------------------------------
댓글 없음:
댓글 쓰기