![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Триггеры 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!