Рассмотрим более подробно синтаксис создания | изменения триггеров, причем следует отметить сходство синтаксиса команды CREATE | ALTER при создании | изменении для всех видов триггеров:
1. ON имя_объекта. Эта секция команды показывает для какого объекта(ов) создается триггер. В случае DML триггеров необходимо указать или имя таблицы (нельзя указывать локальные или глобальные временные таблицы), или имя представления, причем для представления можно создать только INSTEAD OF триггер (выполняется вместо выбранного действия(й)). Для DDL триггеровв качестве имени объектаможно указать либо уровень базы данных (DATABASE), либо уровень сервера БД (ALL SERVER). В зависимости от выбранного уровня будут доступны разные события (группы), для которых можно создать триггер. Для LOGON триггеровв качестве имени объектаможно указать только уровень сервера БД (ALL SERVER).
2. WITH список_опций. Использование опции ENCRIPTION приводит к тому, что текст команды создания триггера шифруется, что не позволяет его просматривать. Эта опция не может быть указана для CLR триггеров (триггеров, написанных на языке, поддерживающем технологию .NET Framework).
3. EXEC[UTE] AS. Определяет контекст выполнения для триггера. Возможны следующие опции: CALLER (значение по умолчанию) – показывает, что все команды в модуле (триггере) выполняются от имени пользователя, действия которого привели к вызову триггера. Следует отметить, что этот пользователь должен иметь соответствующие права на доступ не только к триггеру, но и ко всем объектам, с которыми триггер работает во время своего выполнения. SELF – эквивалентно указанию имени пользователя, создавшего или изменившего данный триггер. OWNER – показывает, что все команды данного триггера выполняются в контексте (от имени) пользователя, являющегося владельцем триггера. Если триггер не имеет владельца, то им является тот пользователь, который является владельцем схемы данных, в которую входит триггер. Эта опция не может быть использована для DDL и LOGON триггеров. ИМЯ_ПОЛЬЗОВАТЕЛЯ | LOGIN_NAME – указывает имя пользователя (для LOGON триггеров необходимо использовать имя login(имя, под которым пользователь соединяется с СУБД)) от имени которого будут выполняться команды триггера. Этот пользователь должен иметь соответствующие права доступа к используемым объектам.
4. {FOR [AFTER] | INSTEAD OF} – показывает, когда будет выполнен триггер: после действия, на которое триггер реагирует (FOR [AFTER], причем слово AFTER является необязательным) или вместо этого действия (INSTEAD OF). Следует отметить, что DML триггеры для представлений могут быть только INSTEAD OF, в то время как DDL и LOGON триггеры могут выполнять только после действия (FOR [AFTER]).
5. ДЕЙСТВИЕ показывает в каком случае(ях) триггер будет выполняться. Для DML триггеровдействием может быть выполнение одной из команд INSERT, UPDATE, DELETE, причем триггер может реагировать как на одну из перечисленных команд, так и на любую пару команд или даже на все команды. Для DDL триггеровуказывается идентификатор группы событий (нумерация групп проставлена с учетом вложенности групп) или события (Табл.1):