DROP TRIGGER(Transact-SQL)

현재 데이터베이스에서 하나 이상의 DML 또는 DDL 트리거를 제거합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ]

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON { DATABASE | ALL SERVER } 
[ ; ]

Trigger on a LOGON event (Logon Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON ALL SERVER 

인수

  • schema_name
    DML 트리거가 속한 스키마의 이름입니다. DML 트리거의 범위는 해당 트리거가 만들어진 테이블이나 뷰의 스키마로 한정됩니다. DDL 또는 LOGON 트리거에 대해서는 schema_name을 지정할 수 없습니다.

  • trigger_name
    제거할 트리거의 이름입니다. 현재 생성된 트리거 목록을 보려면 sys.server_assembly_modules 또는 sys.server_triggers를 사용하십시오.

  • DATABASE
    현재 데이터베이스에 적용된 DDL 트리거의 범위를 나타냅니다. 트리거를 만들거나 수정할 때 DATABASE를 지정한 경우 DATABASE를 지정해야 합니다.

  • ALL SERVER
    현재 서버에 적용된 DDL 트리거의 범위를 나타냅니다. 트리거를 만들거나 수정할 때 ALL SERVER를 지정한 경우 ALL SERVER를 지정해야 합니다. ALL SERVER는 로그온 트리거에도 적용됩니다.

주의

트리거 또는 트리거 테이블을 삭제하여 DML 트리거를 제거할 수 있습니다. 테이블을 삭제하면 이와 연결된 모든 트리거도 삭제됩니다.

트리거를 삭제하면 sys.objects, sys.triggerssys.sql_modules 카탈로그 뷰에서 트리거 정보가 제거됩니다.

같은 ON 절을 사용하여 만든 DDL 트리거에 대해서만 하나의 DROP TRIGGER 문으로 여러 개의 DDL 트리거를 삭제할 수 있습니다.

트리거의 이름을 바꾸려면 DROP TRIGGER와 CREATE TRIGGER를 사용합니다. 트리거의 정의를 변경하려면 ALTER TRIGGER를 사용합니다.

특정 트리거의 종속 관계를 결정하는 방법은 sys.sql_expression_dependencies, sys.dm_sql_referenced_entities(Transact-SQL)sys.dm_sql_referencing_entities(Transact-SQL)를 참조하십시오.

트리거의 텍스트 보기에 대한 자세한 내용은 sp_helptext(Transact-SQL)sys.sql_modules(Transact-SQL)를 참조하십시오.

기존 트리거의 목록 보기에 대한 자세한 내용은 sys.triggers(Transact-SQL)sys.server_triggers(Transact-SQL)를 참조하십시오.

사용 권한

DML 트리거를 삭제하려면 트리거가 정의된 테이블 또는 뷰에 대한 ALTER 권한이 필요합니다.

서버 범위(ON ALL SERVER)로 정의된 DDL 트리거 또는 LOGON 트리거를 삭제하려면 현재 서버에서 CONTROL SERVER 권한이 필요합니다. 데이터베이스 범위(ON DATABASE)로 정의된 DDL 트리거를 삭제하려면 현재 데이터베이스에서 ALTER ANY DATABASE DDL TRIGGER 권한이 필요합니다.

1. DML 트리거 삭제

다음 예에서는 employee_insupd 트리거를 삭제합니다.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('employee_insupd', 'TR') IS NOT NULL
   DROP TRIGGER employee_insupd;
GO

2. DDL 트리거 삭제

다음 예에서는 safety DDL 트리거를 삭제합니다.

중요 정보중요

DDL 트리거는 스키마 범위가 아니고 따라서 sys.objects 카탈로그 뷰에 표시되지 않기 때문에 OBJECT_ID 함수를 사용하여 데이터베이스에 DDL 트리거가 있는지 여부를 쿼리할 수 없습니다. 스키마 범위가 아닌 개체는 해당 카탈로그 뷰를 사용하여 쿼리해야 합니다. DDL 트리거의 경우 sys.triggers를 사용합니다.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
GO