다음을 통해 공유


DDL 트리거 이해

DDL 트리거는 일반 트리거와 마찬가지로 이벤트에 응답하여 저장 프로시저를 시작합니다. 그러나 DML 트리거와 달리 DDL 트리거는 테이블이나 뷰에서 UPDATE, INSERT 또는 DELETE 문에 응답하여 시작되지 않습니다. 대신 다양한 DDL(데이터 정의 언어) 이벤트에 응답하여 시작됩니다. 이러한 이벤트는 주로 CREATE, ALTER 및 DROP 키워드로 시작하는 Transact-SQL 문에 해당합니다. DDL과 같은 작업을 수행하는 특정 시스템 저장 프로시저에서 DDL 트리거가 발생할 수도 있습니다.

중요 정보중요

DDL 트리거를 테스트하여 실행된 시스템 저장 프로시저에 대한 응답을 확인합니다. 예를 들어 CREATE TYPE 문과 sp_addtype 저장 프로시저는 모두 CREATE_TYPE 이벤트에서 생성되는 DDL 트리거를 발생시킵니다. .

데이터베이스 작업 감사 및 조정 등의 관리 태스크에 DDL 트리거를 사용할 수 있습니다.

다음과 같은 경우 DDL 트리거를 사용합니다.

  • 데이터베이스 스키마에 대한 특정 변경 작업을 방지하려는 경우

  • 데이터 스키마가 변경될 때 데이터베이스에서 특정 작업이 수행되게 하려는 경우

  • 데이터베이스 스키마의 변경 내용이나 이벤트를 기록하려는 경우

DDL 트리거를 시작하는 DDL 문이 실행된 후에만 DDL 트리거가 시작됩니다. DDL 트리거를 INSTEAD OF 트리거로 사용할 수 없습니다.

다음 예에서는 데이터베이스 테이블의 수정이나 삭제를 방지하기 위해 DDL 트리거를 사용하는 방법을 보여 줍니다.

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK ;

DDL 트리거는 현재 데이터베이스 또는 현재 서버에서 처리된 Transact-SQL 이벤트에 대한 응답으로 시작될 수 있습니다. 트리거 범위는 이벤트에 따라 다릅니다. DDL 트리거 범위에 대한 자세한 내용은 DDL 트리거 디자인을 참조하십시오.

AdventureWorks 예제 데이터베이스에서 사용 가능한 DDL 트리거 예제를 가져오려면 SQL Server Management Studio 개체 탐색기에서 AdventureWorks 데이터베이스의 프로그래밍 기능 폴더에 있는 데이터베이스 트리거 폴더를 엽니다. ddlDatabaseTriggerLog를 마우스 오른쪽 단추로 클릭한 다음 데이터베이스 트리거 스크립팅을 선택합니다. DDL 트리거 ddlDatabaseTriggerLog는 기본적으로 해제되어 있습니다.