MS-SQL 트랜젝션 처리시 아래와 같이 사용 한다.
한 프로시져에서 여러개의 구문을 실행시 @@error
Begin Transaction
1) Insert 실행
2) Insert 실행
IF(@@Error <> 0)
RollBack Transaction
ELSE
Commit Transaction
1) Insert 실행
2) Insert 실행
IF(@@Error <> 0)
RollBack Transaction
ELSE
Commit Transaction
@@Error의 값은 명령이 실핼할 때마다 업데이트가 되기 때문에 1)번은 실패, 2)번은 성공을 했다면 Commit이 발생하게 된다. -- 즉 1번이 실행이 실패된 상태로 인서트가 발생된다.
Begin Transaction
1) Insert 실행 --> 실패
@@Error 값은 1
2) Insert 실행 --> 성공
@@Error 값은 0
IF(@@Error <> 0) -- 최종적으로 @@Error값이 0이므로 Transaction은 Commit이 된다.
RollBack Transaction
ELSE
Commit Transaction
1) Insert 실행 --> 실패
@@Error 값은 1
2) Insert 실행 --> 성공
@@Error 값은 0
IF(@@Error <> 0) -- 최종적으로 @@Error값이 0이므로 Transaction은 Commit이 된다.
RollBack Transaction
ELSE
Commit Transaction
1. Declare @CntError Int
Begin Transaction
Declare @CntError int
SET @CntError = 0
1) Insert 실행
IF(@@Error <> 0)
SET @CntError=@CntError+1
2) Insert 실행
IF(@@Error <> 0)
SET @CntError=@CntError+1
IF(@CntError>0)
RollBack Transaction
ELSE
Commit Transaction
Declare @CntError int
SET @CntError = 0
1) Insert 실행
IF(@@Error <> 0)
SET @CntError=@CntError+1
2) Insert 실행
IF(@@Error <> 0)
SET @CntError=@CntError+1
IF(@CntError>0)
RollBack Transaction
ELSE
Commit Transaction
2. IF @@error<>0 GOTO _RollbackLabel
Begin Transaction
1) Insert 실행
IF(@@Error <> 0) GOTO _QuitTran
2) Insert 실행
IF(@@Error <> 0) GOTO _QuitTran
COMMIT TRAN
GOTO _SaveTran
_QuitTran:
----------------------------------------------------
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRAN
END
RETURN
----------------------------------------------------
_SaveTran:
----------------------------------------------------
RETURN
----------------------------------------------------
GO
1) Insert 실행
IF(@@Error <> 0) GOTO _QuitTran
2) Insert 실행
IF(@@Error <> 0) GOTO _QuitTran
COMMIT TRAN
GOTO _SaveTran
_QuitTran:
----------------------------------------------------
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRAN
END
RETURN
----------------------------------------------------
_SaveTran:
----------------------------------------------------
RETURN
----------------------------------------------------
GO