Отключить триггер обновления в некоторых ситуациях - PullRequest
1 голос
/ 09 мая 2011

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

Ответы [ 4 ]

4 голосов
/ 09 мая 2011

В MSDN есть пример того, как использовать CONTEXT_INFO для отключения триггера только для одного сеанса.

0 голосов
/ 13 февраля 2018

Аналогично ответу Dalex:

Другое решение заключается в добавлении столбца, например Triggered.И используйте что-то подобное в своем триггере.

IF NOT UPDATE(Triggered)
BEGIN
  RETURN;
END

UPDATE() просто проверяет, был ли столбец включен в триггер, а не проверяло, действительно ли значение было изменено.Если каждый запрос, который вы хотите запустить, имеет Triggered = 1, он сработает.Запросы, у которых этого нет, не будут запускать триггер.

Вы можете использовать столбец nvarchar и использовать поле причины как флаг и как объяснение.1014 *

IF NOT UPDATE(Reason)
BEGIN
  RETURN;
END

Если вы обновите поле lastLogin при входе в систему, вы можете исключить причину, поскольку триггер не сработает.

UPDATE Users
  SET LastLogin = getDate()
WHERE UserID = ...
0 голосов
/ 09 мая 2011

Вы должны изменить таблицу и триггер.Одним из возможных решений является добавление столбца в вашу таблицу, например, Triggered.Когда вы делаете «нормальное» обновление, вы должны вставить 1. Если вам нужно избежать обновления, то triggered = 0.Код запуска должен быть:

IF EXISTS(SELECT * FROM INSERTED WHERE triggered=1)
--here you trigger fired
0 голосов
/ 09 мая 2011

Используйте отключить оператор триггера, а затем выполните обновление, как показано ниже

DISABLE TRIGGER Person.uAddress ON Person.Address;
update ....
ENABLE Trigger Person.uAddress ON Person.Address;
...