При создании синхронизирующего действия в триггере вы обычно должны указать, на какое значение столбца вы ссылаетесь - на значение, которое столбец имел до выполненного изменения или после изменения. По этой причине для проверки нужных значений создаются две виртуальные таблицы со специальными именами:
♦ deleted содержит копии строк, которые были удалены из таблицы;
♦ inserted содержит копии строк, которые были добавлены в таблицу.
Структура этих таблиц эквивалентна тем таблицам, для которых задан триггер.
Таблица deleted используется, если в операторе create trigger задано предложение delete или update. Таблица inserted используется, если в операторе create trigger задано предложение insert или update. Это означает, что для каждого оператора delete, выполняемого в действиях триггера, создается таблица deleted. Аналогично, для каждого оператора insert, выполняемого в действиях триггера, создается таблица inserted.
Оператор update трактуется как оператор delete, за которым следует оператор insert. Поэтому для каждого оператора update, выполняемого в действиях триггера, создаются таблицы deleted и inserted (именно в этом порядке).
Материализация таблиц deleted и inserted осуществляется с использованием средств контроля версий строк, которые подробно обсуждались. Когда операторы DML, такие как insert, update и delete, выполняются для таблицы, соответствующей триггеру, все изменения таблицы всегда фиксируются в виде версий строк. Когда триггеру требуется информация из таблицы deleted, он выбирает данные из истории версий. В случае таблицы inserted триггер выбирает данные из самой последней версии строки.