Принципы планирования DML-триггеров
Есть два параметра реализации триггеров DML.
Триггеры INSTEAD OF выполняются вместо обычных триггерных действий. Триггеры INSTEAD OF также могут быть определены в представлениях с одной или более базовыми таблицами, где они могут расширить типы поддерживаемых представлением обновлений.
Триггеры AFTER выполняются после выполнения инструкций INSERT, UPDATE или DELETE. Триггер AFTER аналогичен FOR. Триггеры AFTER могут быть определены только в таблицах.
Функциональность триггеров AFTER и INSTEAD OF сравнивается в следующей таблице.
Функция |
Триггер AFTER |
Триггер INSTEAD OF |
---|---|---|
Сущности, к которым применяется триггер |
Таблицы. |
Таблицы и представления. |
Количество триггеров на таблицу или представление |
Несколько триггеров на одно запускающее триггеры действие (UPDATE, DELETE или INSERT). |
Один триггер на одно запускающее триггеры действие (UPDATE, DELETE или INSERT). |
Каскадные ссылки |
Нет ограничений. |
Триггеры INSTEAD OF UPDATE и DELETE нельзя определять для таблиц, на которые распространяются каскадные ограничения ссылочной целостности. |
Выполнение |
После следующих операций.
|
Перед следующей операцией.
Вместо следующей операции.
После следующих операций.
|
Порядок выполнения |
Можно задать выполнение в первую и в последнюю очередь. |
Неприменимо |
Ссылки на столбцы varchar(max), nvarchar(max) и varbinary(max) в таблицах inserted и deleted |
Разрешены. |
Разрешены. |
Ссылки на столбцы text, ntext и image в таблицах inserted и deleted |
Запрещены. |
Разрешены. |