Поделиться через


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