Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вся метода 3 (2).doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.15 Mб
Скачать

Исполнение триггеров

Триггер, запущенный в результате добавления или обновления табличных данных, сохраняет новые или модифицированные данные в таблице под названием Inserted, а триггер, сработавший при удалении данных из таблицы, сохраняет удаленные данные в таблице Deleted. С помощью команд Transact-SQL выполняются запросы к этим таблицам, кото­рые существуют в памяти. Эта особенность важна для функционирования большинства триггеров: прежде чем внесенные изменения будут зафиксированы, задача триггера (на­пример, модификация значения в связанной таблице) сравнивает данные таблиц Inserted или Deleted с данными модифицированной таблицы. Используя данные из таблиц Inserted или Deleted, триггер может откатить транзакцию, если этого требуют бизнес – правила.

В SQL Server 2000 существуют два класса триггеров: INSTEAD OF и AFTER. Первые выполняются в обход действий, вызывавших их срабатывание, заменяя эти действия. Например, обновление таблицы, в которой есть триггер INSTEAD OF, вызовет срабатывание этого триггера. В результате вместо оператора обновления выполняется код триггера. Это позволяет размещать в триггере сложные операторы обработки, которые дополняют дей­ствия оператора, модифицирующего таблицу.

AFTER-триггеры исполняются после действия, вызвавшего срабатывание триггера. Они считаются классом триггеров по умолчанию. Один триггер разрешается привязать к единственной таблице или представлению.

Между триггерами этих двух классов существует ряд важных отличий, показанных в таблице.

Табл.2.5.

Отличия между триггерами

Характеристика

INSTEAD OF-триггер

AFTER-триггер

Объект, к которому можно привязать триггер

Допустимое число триггеров

Порядок исполнения

Таблица или представление. Триггеры, привязанные к представлению, расширяют список типов обновления, которые может поддерживать представление

В таблице или представлении допускается не больше одного триггера в расчете на одно действие. Можно определять представления для других представлений, каждое со своим собственным INSTEAD OF-триггером

Поскольку в таблице или представлении допускается не больше одного такого триггера в расчете на одно событие, порядок не имеет смысла

Таблица.

AFTER-триггеры сраба­тывают при модифика­ции данных в таблице в ответ на модификацию представления

К таблице можно привязать несколько AFTER-триггеров

Можно определять триг­геры, срабатывающие первым и последним. Для этого служит системная хранимая процедура sp_settriggerorder. Порядок срабатывания других тригге­ров, привязанных к таблице, случаен

К таблице разрешено привязывать триггеры обоих классов. Если в таблице определе­ны ограничения и триггеры обоих классов, то первым из них срабатывает триггер INSTEAD OF, затем обрабатываются ограничения и последним срабатывает AFTER-триггер. При нарушении ограничения выполняется откат действий INSTEAD OF-триггера. Если нару­шаются ограничения или происходят какие-либо другие события, не позволяющие моди­фицировать таблицу, AFTER-триггер не исполняется.

Как и в случае хранимых процедур, глубина вложенности триггеров достигает 32 уров­ней, также возможно рекурсивное срабатывание триггеров.