DISABLE TRIGGER(Transact-SQL)
트리거를 비활성화합니다.
구문
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]
인수
schema_name
트리거가 속한 스키마의 이름입니다. DDL 또는 로그온 트리거에 대해서는 schema_name을 지정할 수 없습니다.trigger_name
비활성화할 트리거의 이름입니다.ALL
ON 절의 범위에서 정의된 모든 트리거가 비활성화되었음을 나타냅니다.주의 SQL Server는 병합 복제용으로 게시된 데이터베이스에서 트리거를 만듭니다. 게시된 데이터베이스에서 ALL을 지정하면 이 두 트리거가 비활성화되어 복제가 중단됩니다. ALL을 지정하려면 먼저 현재 데이터베이스가 병합 복제용으로 게시되었는지를 확인하십시오.
object_name
실행할 DML 트리거 trigger_name이 만들어진 테이블 또는 뷰의 이름입니다.DATABASE
DDL 트리거의 경우 데이터베이스 범위에서 실행하도록 trigger_name을 만들거나 수정했음을 나타냅니다.ALL SERVER
DDL 트리거의 경우 서버 범위에서 실행하도록 trigger_name을 만들거나 수정했음을 나타냅니다. ALL SERVER는 로그온 트리거에도 적용됩니다.[!참고]
포함된 데이터베이스에서는 이 옵션을 사용할 수 없습니다.
주의
트리거는 기본적으로 만들 때 활성화됩니다. 트리거를 비활성화하면 트리거는 삭제되지 않고 현재 데이터베이스에 개체로 남아 있습니다. 그러나 해당 트리거가 프로그래밍된 Transact-SQL 문을 실행하는 경우에도 트리거는 실행되지 않습니다. ENABLE TRIGGER를 사용하여 트리거를 다시 활성화할 수 있습니다. 테이블에 정의된 DML 트리거는 ALTER TABLE을 사용하여 비활성화되거나 활성화될 수도 있습니다.
사용 권한
DML 트리거를 비활성화하려면 사용자에게 최소한 트리거를 만든 테이블 또는 뷰에 대한 ALTER 권한이 필요합니다.
서버 범위(ON ALL SERVER)의 DDL 트리거 또는 로그온 트리거를 비활성화하려면 서버에 대한 CONTROL SERVER 권한이 필요합니다. 데이터베이스 범위(ON DATABASE)에서 DDL 트리거를 비활성화하려면 사용자에게 최소한 현재 데이터베이스에서 ALTER ANY DATABASE DDL TRIGGER 권한이 필요합니다.
예
1.테이블에 대한 DML 트리거 비활성화
다음 예에서는 Address 테이블에 만들어진 uAddress 트리거를 비활성화합니다.
USE AdventureWorks2012;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
2.DDL 트리거 비활성화
다음 예에서는 데이터베이스 범위에서 DDL 트리거 safety를 만든 후 비활성화합니다.
IF EXISTS (SELECT * FROM sys.triggers
WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety ON DATABASE;
GO
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO
3.같은 범위에서 정의된 모든 트리거 비활성화
다음 예에서는 서버 범위에서 만든 모든 DDL 트리거를 비활성화합니다.
USE AdventureWorks2012;
GO
DISABLE Trigger ALL ON ALL SERVER;
GO