트랜잭션과 함께 트리거


25

다음과 같은 상황이 있다고 가정하십시오.

우리는 테이블을 Table_A가지고 있습니다 INSERT. 트리거 작업은에 table_B삽입 된 값을 기반으로 일부 행을 업데이트하는 것 입니다 table_A.

이제 테이블에 행을 간단하게 삽입하면 모든 것이 정상이지만 트랜잭션을 통해 데이터를 삽입하는 상황은 어떻습니까? 트리거는 모든 트랜잭션 명령문이 성공적으로 실행될 때까지 기다리거나 삽입을 인식하는 순간에 발생합니까? 첫 번째 삽입을 인식했을 때 트리거가 즉시 실행되면 마지막 행에서 트랜잭션이 실패하면 어떻게됩니까? 그 상황에 대한 메커니즘이 있습니까?

답변:


37

삽입은 항상 트랜잭션 내에 있습니다.

명시 적이 BEGIN TRAN ... COMMIT없거나 SET IMPLICIT_TRANSACTIONS ON명령문이 포함 된 자동 커밋 트랜잭션으로 실행됩니다 .

트리거는 항상 트리거를 발생시키는 작업에 대한 트랜잭션의 일부입니다. 트랜잭션 롤백을 유발하는 트리거에서 오류가 발생하면 실행 조치도 롤백됩니다.

트리거는 암시 적으로 XACT_ABORT켜져 있습니다. 이 설정을 사용하면 오류가 자동으로 트랜잭션 롤백으로 이어집니다 ( RAISERROR문과 함께 코드에서 발생한 오류는 제외 ).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.