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