SQL Server ОТКЛЮЧИТЬ ТРИГГЕР

Краткое содержание: В этом руководстве вы узнаете, как использовать оператор SQL Server DISABLE TRIGGER для отключения триггера.

Введение SQL Server ОТКЛЮЧЕНИЕ ТРИГГЕРА

Иногда, для устранения неполадок или восстановления данных, вам может потребоваться временно отключить триггер. Для этого используйте оператор DISABLE TRIGGER:

DISABLE TRIGGER [schema_name.][trigger_name] 
ON [object_name | DATABASE | ALL SERVER]

В этом синтаксисе:

  • Сначала укажите имя схемы, к которой принадлежит триггер, и имя триггера, который вы хотите отключить, после ключевых слов DISABLE TRIGGER.
  • Во-вторых, укажите имя таблицы или представления, к которому был привязан триггер, если триггер является триггером DML. Используйте DATABASE, если триггер является триггером DDL database-scoped, или SERVER, если триггер является триггером DDL server-scoped.

Пример ОТКЛЮЧЕНИЯ ТРИГГЕРА SQL Server

Следующий оператор создает новую таблицу с именем sales.members для демонстрации:

CREATE TABLE sales.members(
    member_id INT IDENTITY PRIMARY KEY,
    customer_id INT NOT NULL,
    member_level CHAR(10) NOT NULL
);

Следующий оператор создает триггер, который срабатывает всякий раз, когда в таблицу sales.members вставляется новая строка. Для демонстрационных целей триггер просто возвращает простое сообщение.

CREATE TRIGGER sales.trg_members_insert
ON sales.members
AFTER INSERT
AS
BEGIN
    PRINT 'A new member has been inserted';
END;

Следующий оператор вставляет новую строку в таблицу sales.members:

INSERT INTO sales.members(customer_id, member_level)
VALUES(1,'Silver');

Из-за события INSERT триггер сработал и вывел следующее сообщение:

A new member has been inserted

Чтобы отключить триггер sales.trg_members_insert, используйте следующий оператор DISABLE TRIGGER:

DISABLE TRIGGER sales.trg_members_insert 
ON sales.members;

Теперь, если вы вставите новую строку в таблицу sales.members, триггер не сработает.

INSERT INTO sales.members(customer_id, member_level)
VALUES(2,'Gold');

Это означает, что триггер был отключен.

Обратите внимание, что определение триггера все еще находится в таблице. Если вы просмотрите триггер в SQL Server Management Studio(SSMS), вы увидите красный крестик на имени отключенного триггера:

Пример ОТКЛЮЧЕНИЯ ТРИГГЕРА SQL Server

Отключить все триггеры на столе

Чтобы отключить все триггеры в таблице, используйте следующий оператор:

DISABLE TRIGGER ALL ON table_name;

В этом операторе вам просто нужно указать имя таблицы, чтобы отключить все триггеры, относящиеся к этой таблице.

Следующий оператор создает новый триггер в таблице sales.members, который срабатывает после события удаления:

CREATE TRIGGER sales.trg_members_delete
ON sales.members
AFTER DELETE
AS
BEGIN
    PRINT 'A new member has been deleted';
END;

Чтобы отключить все триггеры в таблице sales.members, используйте следующий оператор:

DISABLE TRIGGER ALL ON sales.members;

На следующем рисунке показано состояние всех триггеров, принадлежащих таблице sales.members:

SQL Server отключает все триггеры таблицы

Отключить все триггеры в базе данных

Чтобы отключить все триггеры в текущей базе данных, используйте следующий оператор:

DISABLE TRIGGER ALL ON DATABASE;

В этом руководстве вы узнали, как использовать оператор SQL Server DISABLE TRIGGER для отключения триггера.

Мирослав С.

Автор статей, ИБ-специалист