Программирование >>  Реализация баз данных 

1 ... 93 94 95 [ 96 ] 97 98 99 ... 162


USE BookShopDB - - . . .

GO . .

CREATE TRIGGER dbo. alerter

Имена триггеров одчшяться правилам, определенным, для идентификаторов. Например, чтобы создать триггер Alerter for the Employees Table, следует заключить его имя в квадратные скобки:

CREATE TRIGGER rbo [.ч:р.г+рг for iti-:1 nyps table]

При администрировании триггеров, например при их удалении, необходимо следовать

правилам для идентификаторов.

Конструкция ON

Триггер необходимо привязать к таблице или представлению. Конструкция ON позволяет указать такую таблицу или представление, которые после привязки называются триггера или представлением триггера соответственно. Для согласованности после конструкции ON следует указывать владельца таблицы или представления. Например, следующий код Transact-SQE привязывает триггер Alerter к таблице Employees (оба объекта, триггер и таблица, принаежат dbo):

CREATE TRIGGER dbo. alerter . . .

ON dbo. employees

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

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

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

Конструкции FOR, AFTER E-AD OF

При создании триггера следует задать тип события, вызывающего его срабатывание. Типов события три: INSERT, UPDATE и DELETE. Один и тот же триггер может сработать

на одно, два или все три события. Если необходимо, чтобы он срабатывал на все события, то после конструкций FOR, AFTER или INSTEAD OF следует поместить все три ключевых слова: INSERT, UPDATE и DEEETE в любом порядке. Например, следующий код Transact-SQL заставляет триггер Alerter срабатывать на все события:

CREATE TRIGGER dbo, alerter

ON dbo.employees

FOR INSERT, UPDATE. DELETE

Конструкция FOR - синоним AFTER. Поэтому приведенный выше код создаеТ ER-триггер. Чтобы создать триггер Alertei как INSTEAD OF, используйте следующий код:

CREATE TRIGGER dbo. alerter ON doo.employees

INSTEAD OF INSERT, UPDATE, DELETE

Обратите что вместо конструкции FOR применяется конструкция INSTEAD



Конструкция AS

Конструкция AS и следующие за ней команды языка определяют задачу,

которую будет выполнять триггер. Ниже приводится пример создания триггера который посьшает по электронной почте сообщение пользователю ВаггуТ, если в таблице employees 11РОИСХ0ДЯТ события INSERT. UPDATE или DELETE:

USE BookShopDB

CREATE TRIGGER cJbo.alerter ON dbo.employee:

AETER INSERT. UPDATE, DELETE AS

EXEC master. .xp sendmall ВаггуТ. A record was just inserted, updated

or deleted

the Employees table.

Пример мы упростили, чтобы более ясно продемонстрировать создание задачи в триггере. Есть несколько способов лать результаты задачи более полезными. Например, запрограммировать задачу так, чтобы в почтовом сообщении отображались подроб:ные сведения о внесенных изменениях. Примеры более сложных триггеров показаны и разобраны в занятии 3.

Создание триггеров с помощью Enterprise Manager

Для создания триггеров используют интерфейс или такие приложения, как

Enterprise Manager. Чтобы создать триггер в Enterprise Manager, прежде всего необходимо выбрать базу данных. Далее, щелкнув правой кнопкой таблицу, к которой следует привязать триггер, выберите АН Tasks и щелкните Manage Triggers. В текстовом поле диалогового окна Trigger Properties введиге текст триггера. На рис. 9-1 показано диалоговое окно Trigger Properties с кодом предыдущего примера.

Trigger Properties

GenEfa!:

EATETfilSGERdboatertw

ON dbo

Шт UPPATE

EXEC master .45 tS5<hwa6Л1Т,

tbeck SjirX*! I


Рис. 9-1. Ви мадки General в диалоговом окне Trigger Properties для нового триггера



Управление триггерами . .

Триггеры - это мощные объект зы данных, которые автоматически исполняются при модификации таблицы ил та£ления. Для управления триггерами предназначен ряд команд и инструментов баз данных. Триггеры разрешается:

модифицировать с помощью оператора ALTER TRIGGER;

переименовать средствами системной хранимой процедуры sp rename;

просмотреть путем запростемных таблиц или с использованием системных хранимых процедур или

удалить с помощью оператора ROP TRIGGER;

включить или выключить при помощи конструкций DISABLE TRIGGER и ENABLE TRIGGER оператора ALTER TAJiLE,

Для модификации, просмотра и удаления триггеров также применяют опцию Manage

Triggers из Enterprise Manager. Далее на этом занятии подробно рассмотрено выполнение

этих задач по управлению триггерами.

Изменение и переименование триггеров

Для модификации текста триггер удалить и воссоздать с новым текстом. Другой

способ, без удаления, заключается к использовании оператора ALTER TRIGGER. Синтаксис этого оператора аналогичен синтаксису оператора CREATE TRIGGER, но ALTER TRIGGER не удаляет триггер из системных таблиц SysComments и SysObjects. В следующем примере показано, как триггер так, чтобы он только об обновлении записей в таблице Employees:

ALTER TRIGGER dbo. alerter . .

ON dbo.employees .... ;

AFTER UPDATE AS

EXEC master. .xp sendmail Ваггу

A record was just updated in the Employees table.

GO .

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

UPDATE, а также обратите внимание на изменения в тексте сообщения.

В Enterprise Manager для модификации триггеров служит опция Manage Triggers, с которой вы познакомились в предыдущем разделе этого занятия. В диалоговом окне Trigger

Properties выберите триггер, который хотите модифицировать. Далее измените слово

CREATE на ALTER. На рис. 9-2 показано, как изменить триггер Alerter с помощью

Enterprise Manager.

Обратите внимание: команда GO удалена. В первых выпусках SQL Server 2000 эта команда вызывала ошибку при попытке модификации триггера.

Иногда новые соглашения >1!аки1: требуют переименовать триггер, это также бывает необходимо при реализации таблице нескольких триггеров. Для переименования триггера применяют системную хранимую процедуру В следующем примере

показано, как переименовать триггер в

£.p renaiiiie (giob]name = alerter name = empalerter

Обратите внимание, что в синтаксисе переименования не указан dbo. Системная хранимая процедура sprename иоляет передать триггер другому владельцу. Чтобы изменить владельца триггера, использовать оператор CREATE TRIGGER. Переименовав вложенный триггер, обязательно модифицируйте и вызывающий триггер: в нем

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



1 ... 93 94 95 [ 96 ] 97 98 99 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика