2014-01-24 3 views
0

임의적으로 발생하는 이상한 동작이 나타납니다. 내 스토어 절차는 기본적으로 다음과 같습니다. 코드 위의 대부분의 시간을 위해Sql 트랜잭션이 전체 롤백을 수행하지 않습니다.

begin try 
     begin tran 
     insert into table1 
     update table2 
     insert into table3 
     commit tran 
end try 

begin catch 
     rollback tran 
end catch 

은 가끔 (하루에 한 번 또는 두) 일부 오류가 발생하면, 트랜잭션이 3 개 테이블에서 변경 사항을 롤백하지 않습니다를 제외하고 잘 작동합니다.

begin try 
      begin tran 
      insert into table1----Rollback doesn't happen 
      update table2--Rollback happens 
      insert into table3--Rollback happens 
      commit tran 
    end try 

    begin catch 
      rollback tran 
    end catch 

누군가 내가 잘못 생각한 부분을 제안하거나 다른 방법으로 거래를 처리해야합니까?

미리 감사드립니다.

+0

입니다이 불가능를 확인합니다. 분석이 틀렸어 야합니다. 트랜잭션이 부분적으로 롤백되는 유일한 방법은 의도적으로 세이브 포인트로 롤백하는 경우입니다. –

+0

설명하는 방식으로 롤백이 일어나지 않았 음을 어떻게 결정 했습니까? 어떤 정보/로그 등이 문제라고 지적하셨습니까? –

+1

당신은'update table2'와'insert into table3' 롤백이 발생한다고 말했죠. 그것은 반드시 사실이 아닙니다. 'insert into table1'에서 에러가 발생하면 즉시 catch 블록으로 건너 뜁니다. 따라서 "롤백 발생"이 아니라 오히려 "결코 수행되지 않는 작동"이 아닙니다. –

답변

관련 문제