Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция 3 Триггеры

.docx
Скачиваний:
49
Добавлен:
25.02.2015
Размер:
21.65 Кб
Скачать

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

  1. Реагируют при работе с определенной таблицей

  2. Реагируют при работе с базой данных целиком (события, связанные с базой данных)

Задачи:

  1. Поддержка ссылочный целостности;

  2. Для создания хитрых ограничений;

  3. Корректировать действия;

  4. Исполнение определенного кода;

  5. Для создания журнала.

Виды триггеров:

  1. На вставку;

  2. На удаление;

  3. На изменение;

  4. Комбинированные - усложняют код.

Особенности триггеров:

  1. Пользователь не контролирует выполнение триггера;

  2. Нет входных и возвращаемых параметров;

  3. Триггеры связаны с конкретной таблицей;

  4. Триггеры не запускаются и не выполняются при массовых вставках (информация о которых не идет в log).

Теоретически существует три типа триггеров:

  1. После-триггер - срабатывает после действия;

  2. Совершаются вместо действия;

  3. Пре-триггер - срабатывает до события, не реализованы в SQL Server из-за политики безопасности.

  • FOR - всегда действуют за событием

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

  • Instant of - вместо действия, по одному триггеру на действие

Синтаксис:

create trigger <name>

on <name table/представление>

for/after/instant of

Действие, которое будет являться инициатором запуска триггера (одно или комбинация) = insert/update/delete

as

Код

Параметры триггеров:

  • With excription - для защиты

  • Not for replication - не будет запускаться при репликации

  • With append - триггер будет корректно работать с серверами старых версий

Для триггера insert: как только срабатывает одна из операций и система знает, что есть триггер, появляется таблица inserted, которая является копией начальной таблицей по названию столбцов, но содержимое будет состоять из того, что хотели вставить. Такая таблица видна только внутри кода триггера. Для удаления таблица deleted. Для update будет создаваться обе эти таблицы.

Sp_settrigerrorder - установление какой триггер будет первым и последним

Включение/выключение триггеров:

Alter <table name> enable (disable) <name trigger>

Пример:

Create trigger t1

On CD

For Insert Update

As

Declare @tmax int

Declare @maxs int

Select @maxs=maxs from Сотр where id=(select iCo from inserted)

Select @tmax=count(*) from CD where idD = (select idD from inserted)

If (@tmax>@maxs)

Begin

RaiseError()

Rollback

End

При вызове операции модификации данных из триггера на туже таблицу, на которую запущен триггер, триггер повторно не запускается (не инициализирует рекурсию)

Create trigger t2

On CD

For Insert Update

As

Declare @ido int

Select @ido from inserted

Declare @ids int

Select @ids = ids from Inserted

If (select title from OTD where Id=@ido)=руководство

Begin

Update co set bonus = salary * 0.1 where ids = @ids

End

Триггеры могут быть источником исключений для внешних программ.

Триггер могут обрабатывать вставки данных эксклюзивных таблиц

Соседние файлы в предмете Проектирование баз данных