Какая разница между триггерами FOR и AFTER?
Разница между триггерами FOR и AFTER?
Ответ 1
Нет никакой разницы, они делают то же самое.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
То же, что и
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
Триггер INSTEAD OF
отличается и запускается перед и вместо вставки и может использоваться для представления, чтобы вставить соответствующие значения в базовые таблицы.
Ответ 2
@Ben абсолютно прав.
Вот статья MSDN Изучение триггеров SQL Server
Абзац статьи:
Этот синтаксис также допустим в более старых версиях SQL Server. Однако теперь, когда в SQL Server 2000 есть два типа триггеров, я предпочитаю ссылаться на триггеры FOR как триггеры AFTER. Таким образом, в оставшейся части этой статьи я буду ссылаться на триггеры AFTER или INSTEAD OF.
Подобно триггеру AFTER, который вы видели ранее, этот триггер предотвращает внесение изменений в поле lastname. Однако он реализует это бизнес-правило иначе, чем предыдущий пример. Поскольку триггер INSTEAD OF срабатывает вместо инструкции UPDATE, триггер INSTEAD OF затем оценивает, проходит ли тест бизнес-правила или нет. Если тест бизнес-правила проходит, чтобы обновление произошло, триггер INSTEAD OF должен явно вызывать оператор UPDATE еще раз.
Ответ 3
ПОСЛЕ того, что триггер DML запускается только тогда, когда все операции, указанные в запуске SQL, выполняются успешно. Все реляционные каскадные действия и проверки ограничений также должны быть успешными до запуска этого триггера. AFTER является значением по умолчанию, когда FOR является единственным указанным ключевым словом.
ПОСЛЕ того, что триггеры не могут быть определены в представлениях.
ВМЕСТО Указывает, что триггер DML выполняется вместо запуска SQL-оператора, поэтому переопределяет действия запускающих операторов. INSTEAD OF нельзя указать для триггеров DDL или входа в систему.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql