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 для таблицы или представления, где создан триггер.
Для отключения триггера DDL в области сервера (ON ALL SERVER) или триггера входа пользователь должен обладать разрешением CONTROL SERVER для этого сервера. Для отключения триггера DDL в области базы данных (ON DATABASE) пользователь должен обладать как минимум разрешением ALTER ANY DATABASE DDL TRIGGER в текущей базе данных.
Примеры
А. Отключение триггера DML в таблице
В следующем примере показано отключение триггера uAddress, созданного для таблицы Address.
USE AdventureWorks2008R2;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO
Б. Отключение триггера 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
В. Отключение всех триггеров, определенных в одной области
В следующем примере отключаются все триггеры DLL, созданные в области сервера.
USE AdventureWorks2008R2;
GO
DISABLE Trigger ALL ON ALL SERVER;
GO