본문 바로가기
㏈ª By β┖υΕJini/MS-SQL

MS-SQL 2000 PROC Transaction에서의 @@error 사용

by ㏈ª ☞ β┖υΕJini.κR 2006. 10. 30.

MS-SQL 트랜젝션 처리시 아래와 같이 사용 한다.

한 프로시져에서 여러개의 구문을 실행시 @@error

Begin 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. 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


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