Триггер может быть создан только в текущей базе данных, но внутри триггера допускается обращение к другим базам данных, в том числе и расположенным на удаленном сервере.
Рассмотрим назначение аргументов.
Имя триггера должно быть уникальным в пределах базы данных. Дополнительно можно указать имя владельца.
При указании аргумента WITH ENCRYPTION сервер выполняет, шифрование кода триггера, чтобы никто, включая администратора, не мог получить к нему доступ и прочитать его. Шифрование часто используется для скрытия авторских алгоритмов обработки данных, являющихся интеллектуальной собственностью программиста или коммерческой тайной.
В SQL Server существует два параметра, определяющих поведение триггеров:
1. AFTER. Триггер выполняется после успешного выполнения вызвавших его команд. Если команды по какой-либо причине не могут быть успешно завершены, триггер выполняться не будет. Следует отметить, что изменения данных в результате выполнения запроса пользователя и выполнение триггера осуществляется в теле одной транзакции: если произойдет откат триггера, то будут отклонены и пользовательские изменения.
Для таблицы можно определить несколько AFTER-триггеров для каждой операции (INSERT, UPDATE, DELETE).
Если для таблицы предусмотрено выполнение нескольких AFTER-триггеров, то с помощью системной хранимой процедуры SP_SETTRIGGERORDER можно указать, какой из них будет выполняться первым, а какой последним.
По умолчанию в SQL Server все триггеры являютсяAFTER-триггерами.
2. INSTEAD OF. Триггер вызывается вместо выполнения команд.
В отличие от AFTER-триггера INSTEAD OF-триггер может быть определен как для таблицы, так и для просмотра. Для каждой операции INSERT, UPDATE, DELETE можно определить только одинINSTEAD OF- триггер.
Триггеры различают по типу команд, на которые они реагируют. Соответственно существует три типа триггеров:
• INSERT TRIGGER. Запускаются при попытке вставки данных с помощью команды INSERT.
• UPDATE TRIGGER - запускаются при попытке изменения данных с помощью команды update.
• DELETE TRIGGER - запускаются при попытке удаления данных с помощью команды DELETE.
В определении триггера конструкции
{[ DELETE] [,] [INSERT] [,] [ UPDATE]} и
{ FOR | AFTER | INSTEAD OF } { [INSERT] [,] [UPDATE]} определяют, на какую команду будет реагировать триггер.
При его создании должна быть указана хотя бы одна команда.
Допускается создание триггера, реагирующего на две или на все три команды.
Аргумент WITH APPEND используется для сочетания средств старых и новых версий SQL Server и позволяет создавать несколько триггеров одного и того же типа.
При создании триггера с аргументом NOT FOR REPLICATION запрещается его запуск во время выполнения модификации таблиц механизмами репликации.
Конструкция AS SQL_оператор [. . . n] определяет набор SQL-операторов и команд, которые будут выполнены при запуске триггера.
Отметим, что внутри триггера не допускается выполнение ряда операций, таких, например, как:
• создание, изменение и удаление базы данных;
• восстановление резервной копии базы данных или журнала транзакций.
Выполнение этих команд не разрешено, так как они не могут быть отменены в случае отката транзакции, в которой выполняется триггер. Это запрещение вряд ли может каким-то образом сказаться на функциональности создаваемых триггеров. Трудно найти такую ситуацию, когда, например, после изменения строки таблицы потребуется выполнить восстановление резервной копии журнала транзакций. t