다음을 통해 공유


DDL 트리거 및 DML 트리거 이해

DDL 트리거와 DML 트리거는 각각 다른 용도로 사용합니다.

DML 트리거는 INSERT, UPDATE 및 DELETE 문에 사용하며 테이블 또는 뷰의 데이터를 수정할 때 비즈니스 규칙을 적용하고 데이터 무결성을 확장하는 데 유용합니다.

DDL 트리거는 CREATE, ALTER, DROP, 기타 DDL 문 및 DDL과 유사한 작업을 수행하는 시스템 저장 프로시저에서 작동합니다. DDL 트리거는 관리 태스크를 수행하고 데이터베이스에 영향을 주는 비즈니스 규칙을 적용하는 데 사용합니다. DDL 트리거는 데이터베이스 또는 서버 전체에서 유형이 동일한 모든 명령에 적용됩니다.

DML 트리거와 DDL 트리거는 비슷한 Transact-SQL 구문을 사용하여 생성, 수정 및 삭제하며 다른 비슷한 동작을 공유합니다.

DML 트리거와 마찬가지로 DDL 트리거도 Microsoft.NET Framework에서 생성되고 SQL Server에서 업로드된 어셈블리에 패키지된 관리 코드를 실행할 수 있습니다. 자세한 내용은 CLR 트리거 프로그래밍을 참조하십시오.

DML 트리거처럼 DDL 트리거도 동일한 Transact-SQL 문에서 여러 개 만들 수 있습니다. 또한 DDL 트리거와 이 트리거를 실행하는 문은 동일한 트랜잭션 내에서 실행됩니다. 이 트랜잭션은 트리거 내에서 롤백될 수 있습니다. 심각한 오류가 발생하면 전체 트랜잭션이 자동으로 롤백될 수도 있습니다. 일괄 처리를 통해 실행되고 ROLLBACK TRANSACTION 문을 명시적으로 포함하는 DDL 트리거는 전체 일괄 처리를 취소합니다. 자세한 내용은 COMMIT 또는 ROLLBACK TRANSACTION이 포함된 DML 트리거 사용을 참조하십시오.

[!참고]

DDL 트리거 본문 내에서 발생하는 ALTER DATABASE 이벤트는 롤백할 수 없습니다.

DML 트리거와 마찬가지로 DDL 트리거도 중첩할 수 있습니다. 자세한 내용은 중첩 트리거 사용을 참조하십시오.

DDL 트리거를 디자인할 때는 다음과 같은 점에서 DML 트리거와 다르다는 것을 고려하십시오.

  • DDL 트리거는 Transact-SQL 문이 완료된 후에만 실행됩니다. DDL 트리거는 INSTEAD OF 트리거로 사용될 수 없습니다.

  • DDL 트리거는 inserteddeleted 테이블을 생성하지 않습니다. DDL 트리거를 실행하는 이벤트에 대한 정보 및 트리거로 변경되는 내용은 EVENTDATA 함수를 사용하여 확인할 수 있습니다. 자세한 내용은 EVENTDATA 함수 사용을 참조하십시오.

참고 항목

개념