Разница между триггерами FOR и AFTER? - PullRequest
105 голосов
/ 17 марта 2011

В чем разница между триггерами FOR и AFTER?

Ответы [ 3 ]

134 голосов
/ 17 марта 2011

Нет разницы, они делают то же самое.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

То же, что и

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Триггер INSTEAD OF отличается и запускается до и вместо вставки и может использоваться в представлениях для вставки соответствующих значений в базовые таблицы.

12 голосов
/ 17 марта 2011

@ Ben абсолютно прав.

Вот статья MSDN Изучение триггеров SQL Server

Абзац из статьи:

Этот синтаксис также допустим в более старых версиях SQL Server.Однако теперь, когда в SQL Server 2000 есть два типа триггеров, Я предпочитаю ссылаться на триггеры FOR как на триггеры AFTER.Таким образом, в оставшейся части этой статьи я буду ссылаться на триггеры AFTER или INSTEAD OF.

Как и триггер AFTER, который вы видели ранее, этот триггер предотвращает внесение изменений в поле фамилии.Однако он реализует это бизнес-правило иначе, чем в предыдущем примере.Поскольку триггер INSTEAD OF запускается вместо оператора UPDATE, триггер INSTEAD OF затем оценивает, прошел тест бизнес-правила или нет.Если тест бизнес-правила пройден, для того, чтобы произошло обновление, триггер INSTEAD OF должен явно снова вызвать оператор UPDATE.

2 голосов
/ 10 октября 2017

AFTER указывает, что триггер DML запускается только тогда, когда все операции, указанные в операторе SQL запуска, выполнены успешно.Все ссылочные каскадные действия и проверки ограничений также должны быть успешными, прежде чем сработает этот триггер.AFTER - это значение по умолчанию, когда FOR является единственным указанным ключевым словом.

ПОСЛЕ триггеров не могут быть определены на представлениях.

INSTEAD OF Указывает, что триггер DML выполняется вместо запускающего оператора SQL, следовательно, переопределяя действия операторов запуска.INSTEAD OF не может быть указан для триггеров DDL или входа в систему.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

...