Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
57
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

ТемаV. Триггеры в системеSql–сервер

1. Понятие триггера. Типы триггеров

Триггер– это особый вид хранимой процедуры, который активизируется при попытке изменения данных в таблице, для которой определен триггер.

Триггеры определяются для конкретных таблиц. Они удобны для БД, используемых большим количеством различных приложений, так как дают возможность поддерживать целост­ность данных, не полагаясь на программное обеспечение прило­жений.

Если правила и установки по умолчанию SQL Server при­меняет перед записью информации в БД, то триггеры – это так называемый постфильтр, применяемый после воздействия правил и установок по умолчанию, он представляет собой последнее слово в модификации. Триггер выполняется SQL Server автома­тически при операциях добавления (INSERT), обновления (UP­DATE) и удаления (DELETE) в данной таблице. Триггер приме­няется после выполнения соответствующей операции. Если триг­гер вызывает ошибку в запросе, SQL Server отказывается от об­новления информации и возвращает сообщение об ошибке в при­ложение, выполняющее это действие. Если для таблицы опреде­лен триггер, то при выполнении соответствующей операции обойти его нельзя. Вызвать триггер непосредственно невоз­можно, он реагирует только на событие, для которого определен.

Наиболее общее применение триггеров – поддержка цело­стности в БД. Он используется, когда не могут быть применены стандартные условия на значения (constraints) столбцов и осно­ванная на таблицах декларативная ссылочная целостность (De­clarative Referential Integrity, DRI). SQL Server рассматривает триггер как единое целое – как одну транзакцию, которая либо фиксируется, либо откатывается, вне зависимости от наличия со­ответствующих операторов в теле триггера.

В SQL Server 2000 для каждой операции модификации данных можно определить несколько триггеров.

2. Создание триггеров

Для создания триггера необходимо быть владельцем БД и владельцем таблицы, для которой он создается. При добавлении триггера к таблице изменяется тип доступа, отношение к ней других объектов. На самом деле изменяется вся схема БД, поэтому этот тип операции зарезервирован для владельца БД и защищен от других пользователей.

Создание триггера очень похоже на объявление хранимой процедуры и имеет следующий синтаксис:

CREATE TRIGGER имя_триггера

ON таблица

[WITH ENCRYPTION]

FOR {DELETE, INSERT, UPDATE}

[WITH APREND]

[NOT FOR REPLICATION]

AS

инструкция SQL

Или используя предложение IFUPDATE:

CREATE TRIGGER имя_триггера

ON таблица

[WITH ENCRYPTION]

FOR {INSERT, UPDATE}

[WITH APREND]

[NOT FOR REPLICATION]

AS

IF UPDATE (имя_столбца1)

[AND | OR UPDATE (имя_столбца2),…]

инструкция SQL.

Параметры команды:

1) WITH ENCRYPTION– зашифровать текст триггера.

2) FOR INSERT, UPDATE, DELETE– определяют операцию модификации таблицы, при которой будет активизиро­ван триггер. Ключевых слов может быть несколько, но обязательно должно быть указано хотя бы одно из них.

3) WITH APREND– используется при создании дополни­тельных триггеров, если установленный уровень со­вместимости не превышает 65.

4) NOT FOR REPLICATION– триггер активизируется только при модификации таблицы в процессе репликации.

5) AS– начало тела триггера.

6) инст­рукция SQL– может содержать любое количество опе­рацийSQL, если они заключены вBegin…end.

7) IF UPDATE(столбец) – для операции добавления и об­новления можно определить дополнительные условия на конкретный столбец (столбцы) – соединить условия можно связкамиANDиOR.

При обновлении версии БД, SQLServerиспользует не­шифрованный текст триггеров, хранимых в таблицеSyscom­ments. Если текст триггера зашифрован, восстановить или обно­вить триггер в новой БД невозможно.

Когда выполняется триггер, SQLServerсоздает специ­альную таблицу, куда он помещает данные, вызвавшие выпол­нение триггера. Эта таблица называетсяINSERTEDдля опера­ций добавления и обновления иDELETED- для операций удаления и обновления. Поскольку триггеры выполняются после заверше­ния операции, строки в таблицеINSERTEDвсегда дублируют одну или несколько записей базовой таблицы.

Ограничения при создании триггеров:

  • оператор CREATE TRIGGERможет применяться только к одной таблице;

  • триг­гер можно создавать только в текущей БД, но в нем можно ссылаться на внешние объекты;

  • триг­гер нельзя создавать на базе представления (View);

  • в тек­сте триггера нельзя использовать следующие инст­рукции:

DENY

DATABASE

DEFAULT

INDEX

RULE

TABLE

TRIGGER

VIEW

PROCEDURE

DROP

GRANT / REVOKE

RECONFIGURE

UPDATE STATISTICS

TRUNCATE TABLE