COMMIT 또는 ROLLBACK TRANSACTION이 포함된 DML 트리거 사용

Microsoft SQL Server 2000 및 SQL Server 2005에서는 문이 시작될 때 트랜잭션 수가 0인 경우에만 문에서 트랜잭션 수가 증가합니다. SQL Server 버전 7.0에서는 문 시작 시 트랜잭션 수와 상관없이 항상 증가합니다. 따라서 SQL Server 2000 및 SQL Server 2005에서는 @@TRANCOUNT가 트리거에서 반환하는 값이 SQL Server 7.0에서의 값보다 낮을 수 있습니다.

SQL Server 2000 및 SQL Server 2005에서는 COMMIT TRANSACTION 또는 COMMIT WORK 문이 트리거에서 실행되고 트리거 시작 시 해당하는 명시적이거나 암시적인 BEGIN TRANSACTION 문이 없으면 SQL Server 버전 7.0과 다른 동작이 수행될 수 있습니다. 트리거에 COMMIT TRANSACTION 또는 COMMIT WORK 문을 배치하지 않는 것이 좋습니다.

일괄 처리에서 COMMIT 또는 ROLLBACK TRANSACTION 문을 포함하는 트리거를 실행하면 전체 일괄 처리가 취소됩니다. SQL Server 2005에서는 오류도 반환됩니다.

다음 예에서 INSERT 문이 ROLLBACK TRANSACTION을 포함하는 DML 트리거를 시작하면 일괄 처리가 취소되기 때문에 DELETE 문이 실행되지 않습니다.

/* Start of Batch */
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.
DELETE employee WHERE emp_id = 'PMA42628M'
GO

사용자 정의 트랜잭션 내에서 ROLLBACK TRANSACTION 문을 포함하는 트리거를 시작하면 ROLLBACK TRANSACTION이 전체 트랜잭션을 롤백합니다. 다음 예에서 INSERT 문이 ROLLBACK TRANSACTION을 포함하는 트리거를 시작하면 UPDATE 문도 롤백됩니다.

/* Start of Transaction */
BEGIN TRANSACTION
UPDATE employee SET hire_date = '7/1/94' WHERE emp_id = 'VPA30890F'
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.

참고 항목

개념

저장 프로시저 및 트리거 내의 롤백 및 커밋
트랜잭션(데이터베이스 엔진)

관련 자료

ROLLBACK TRANSACTION(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기