Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену.pdf
Скачиваний:
189
Добавлен:
28.06.2014
Размер:
1.48 Mб
Скачать

23. Т-SQL.Триггеры и ихназначение.Типы триггеров. Операторы создания, изменения,включения/отключения,удаления триггеров. Ограничения использования триггеров. Примеры.

Триггер(англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) Основное назначение триггеровсостоит в автоматическом использовании их в качестве реакции на некоторые события, происходящие с таблицами, с которыми связанны триггеры. Это свойство триггеров позволяет использовать их для реализации сложных форм ограничений целостности данных. Кроме того, рассматриваемое свойство превращает сервер из пассивного наблюдателя за происходящими изменениями данных в систему,оперативно реагирующую на такие изменения. Правила,в соответствие с которыми осуществляются активные действия сервера,определяются триггерами

Типы триггеров

SQL Server поддерживает три основных типа триггеров: триггеры DML, триггеры DDL и триггеры входа.

Триггеры DDLвыполняются, когда на сервере или в базе данных возникает событие языка определения данных (DDL). Эти события в основном соответствуют инструкциям языка Transact-SQL, начинающимся ключевыми словами CREATE, ALTER или DROP. Системные хранимые процедуры, выполняющие операции, подобные операциям DDL, также могут запускать триггеры DDL.

Пример

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

CREATE TRIGGER safety ON DATABASE

FOR DROP_TABLE, ALTER_TABLE AS

PRINT 'You must disable Trigger "safety" to drop or alter tables!' ROLLBACK ;

Триггеры входавызывают срабатывание хранимыхпроцедур в ответ на событие LOGON. Это событие вызывается при установке пользовательского сеанса с экземпляром SQL Server.Можно использовать триггеры входа для проверки и управления сеансами сервера, например для отслеживания входов в систему, ограничения входов в SQL Server или ограничения числа сеансов для конкретного имени входа

DML-триггерывыполняются при возникновении событий языка обработки данных (DDL) в базе данных. DML-события возникают при выполненииинструкций INSERT, UPDATE или DELETE, изменяющих данные в указанной таблице или представлении. DML-триггеры могут обращаться к другим таблицам и содержать сложные инструкцииTransact-SQL. Триггер и инструкция,при выполнении которой он срабатывает,считаются одной транзакцией,которуюможно откатить назад внутри триггера. При обнаружении серьезной ошибки (например, нехватки пространства на диске) вся транзакция автоматически откатывается назад.

Пример

CREATE TRIGGER reminder1 ON Sales.Customer

AFTER INSERT, UPDATE

AS RAISERROR ('Notify Customer Relations', 16, 10);

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

Триггеры AFTERсрабатывают после обработки действия,вызывающего срабатывание (INSERT, UPDATE или DELETE), триггеров INSTEAD OF и ограничений. Триггеры AFTER можно устанавливать путем указания ключевых слов AFTER или FOR. Так как эффект от ключевого слова FOR тот же, что и от AFTER, DML-триггеры с ключевым словом FOR также относятся к триггерам AFTER.

Триггеры INSTEAD OFсрабатывают вместо действия,вызывающего срабатывание,и перед обработкой ограничений. Если в таблице имеются триггеры AFTER, они сработают после обработки ограничений. В случае нарушения ограничений выполняется откат действий триггеров INSTEAD OF, а триггер AFTER не срабатывает.