Разница между триггерами 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