Можете ли вы создать триггер для поля в таблице? - PullRequest
1 голос
/ 18 марта 2010

Можно ли создать триггер для поля в обновляемой таблице?

Итак, если у меня есть:

TableA
  Field1
  Field2
  ....

Я хочу обновить определенное значение при изменении Field1. В этом случае я хочу обновить Field2 при обновлении Field1, но не хочу, чтобы это изменение вызывало другой вызов триггера и т. Д. *

Ответы [ 4 ]

2 голосов
/ 18 марта 2010

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

0 голосов
/ 23 марта 2010

Вы можете проверить, было ли изменено значение Field1, выбрав его предыдущее значение из DELETED.

SELECT @prevValue = Field1 FROM DELETED WHERE ...
0 голосов
/ 18 марта 2010

Кажется, это решает мою проблему:

CREATE TRIGGER trg_name ON TableA
AFTER UPDATE
AS 
BEGIN
IF UPDATE(FieldA) 
  update import_status set FieldB = 0
END
GO

Обновление:

Как указано в комментариях, это, как правило, плохая идея, поскольку она обновит КАЖДУЮ ОДНУ СТРОКУ, что, вероятно, не то, что вам нужно. В этом конкретном случае, однако, всегда будет только одна строка, которая просто используется для хранения метки времени и поля флага.

0 голосов
/ 18 марта 2010

В этом случае вы можете использовать триггер INSTEAD OF. Они НЕ запускаются рекурсивно. Прочтите здесь для получения дополнительной информации о рекурсивных триггерах (поиск "рекурсивно").

Как всегда, ОЧЕНЬ ОСТОРОЖНО, что вы делаете с триггером INSTEAD OF. Вы можете делать очень неприятные вещи (например, когда кто-то вызывает оператор вставки, вы можете отклонить его, чтобы он стал оператором удаления для некоторой случайной записи - то есть очень неприятной вещью!)

...