Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Триггер INSTEAD OF



Триггеры INSTEAD OF переопределяют стандартные действия инструкции, вызывающей триггер. Поэтому они могут использоваться для проверки на наличие ошибок или проверки значений на одном или нескольких столбцах и выполнения дополнительных действий перед вставкой, обновлением или удалением одной или нескольких строк. Например, если обновляемое значение в столбце почасовой оплаты в таблице учетной ведомости начинает превышать определенное значение, то с помощью этого триггера можно, либо задать вывод сообщения об ошибке и откатить транзакцию, либо сделать вставку новой записи в след аудита до вставки записи в таблицу учетной ведомости. Главное преимущество триггеров INSTEAD OF в том, что они позволяют поддерживать обновления для таких представлений, которые обновлять невозможно. Например, в представлении, основанном на нескольких базовых таблицах, должен использоваться триггер INSTEAD OF для поддержки операций вставки, обновления и удаления, которые ссылаются на данные больше чем в одной таблице. Другое преимущество триггера INSTEAD OF состоит в том, что он обеспечивает логику кода, при которой можно отвергать одни части пакета и принимать другие. Если триггер INSTEAD OF отработал успешно, необходимо продублировать инструкцию, вызвавшую триггер, так как данные не попали в таблицу, если возникла ошибка, никаких действий не требуется.

Функциональность триггеров AFTER и INSTEAD OF сравнивается в следующей таблице.

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

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

Имя триггера должно быть уникальным в пределах базы данных. Дополнительно можно указать имя владельца.

По умолчанию в SQL Server все триггеры являются AFTER -триггерами.





Дата публикования: 2015-09-17; Прочитано: 219 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...