Триггер представляет собой некую разновидность хранимой процедуры, которая выполняется при наступлении определенных событий. Триггеры обычно сохраняются в виде фрагментов кода, прикрепленных к определенной таблице.
В отличие от хранимых процедур, исполнение кода триггера явно не вызывается, триггеры автоматически стартуют при наступлении события, связанного с триггером. Действительно, поскольку явно вызвать триггеры нельзя, единственный способ заставить их выполняться – это создать соответствующие условия или породить событие, с которым они связаны.
Кроме невозможности явного вызова триггера, от хранимых процедур их отличают еще две вещи: отсутствие параметров и возвращаемых значений.
В SQL Server существуют три типа триггеров (для каждого типа запроса, выполняющих изменение данных), плюс все возможные их сочетания.
Синтаксис оператора создания триггера:
CREATE TRIGGER <имя триггера>
ON <имя представления или таблицы>
[WITH ENCRYPTION]
{{{FOR|AFTER}<[DELETE][,][INSERT][,][UPDATE]>}|INSTEAD OF}
|
|
[WITH APPEND]
[NOT FOR REPLICATION]
AS
<SQL-оператор
...
...
...>
К общепринятым сферам применения триггеров относиться:
- поддержка ссылочной целостности;
- создание контрольного журнала: запись информации, отражающей не только последнее состояние данных, но и хранение истории вносимых изменение для каждой записи;
- вместо ограничений проверки для работы с несколькими таблицами, базами данных или даже несколькими серверами;
- выполнение собственного программного кода вместо операторов пользователя (обычно для осуществления вставки в сложные представления).
Ход работы
1 Создать связи между таблицами (справочной таблицей (со стороны «один» связи «один-ко-многим») и таблицей данных (со стороны «многие» связи «один-ко многим») с помощью двух триггеров.
− Триггер справочной таблицы запрещает удаление записей в этой таблице, значение ключевых полей которой существуют в таблице данных.
− Триггер таблицы данных запрещает вставку и редактирование записей, значение ключевых полей которых отсутствуют в справочной таблице.
2 Проверить работу триггеров, организующих связи между таблицами.
3 Создать для каждой таблицы триггеры (Update, Delete, Insert), выполняющие определенные действия при запуске. Например, обновление значений поля путем вычисления по формуле при наступлении определенного события.
4 Организовать запуск триггеров таким образом, чтобы при выполнении одного триггера, запускался второй, при выполнении второго – третий и т.д., осуществив тем самым каскадное воздействие объектов базы данных.
5 Проверить работу триггеров, выполняющих определенные действия при запуске.
|
|
6 Пояснить работу триггера при установке опций FOR|AFTER и INSTEAD OF.
7 Оформить подробный отчет и сделать вывод по выполненной работе.
Контрольные вопросы
1 Что представляет собой триггер? Назначение.
2 Виды триггеров. Различия.
3 Синтаксис создания, изменения, удаления триггера.
4 Какие временные таблицы создаются при выполнении каждого вида триггера?
5 Может ли таблица не указанная после ключевого слова ON при создании триггера воспользоваться действием триггера? Почему?
6 Как триггеры можно использовать для установления ссылочной целостности?
7 Какие операторы Transact-SQL можно использовать в теле триггера?
8 Что произойдет после выполнения (Compile) команды Create Trigger...?
9 Какие операции могут выполнять триггеры?
10 Создание триггера в графическом режиме.
Лабораторная работа № 11