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

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

3 ответов


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

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

это то же самое, что

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

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


@Ben совершенно верно.

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

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

этот синтаксис также допустим в более старых версиях SQL Server. Однако теперь, когда в SQL Server 2000 есть два типа триггеров,я предпочитаю ссылаться на триггеры как после триггеров. Таким образом, для остальной части этой статьи я буду ссылаться либо после, либо вместо провоцирующие факторы.

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


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

триггеры AFTER не могут быть определены в представлениях.

ВМЕСТО Указывает, что триггер DML выполняется вместо инициирующей инструкции SQL, поэтому, переопределение действий инициирующих операторов. Вместо не может быть указано для триггеров DDL или входа в систему.

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