Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР методичка прог в КС / метод_лаб_программирование_КС_071900_2010.doc
Скачиваний:
42
Добавлен:
10.06.2015
Размер:
337.41 Кб
Скачать

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

Таблица может содержать триггеры трех типов – вставки, обновления или удаления (или любую комбинацию этих трех типов). Количество триггеров в таблице теперь не ограничивается.

Для создания триггера нужно выбрать в контекстном меню таблицы All tasks  Manage Triggers…

Команда создания триггера имеет следующий синтаксис:

CREATE TRIGGER имя_триггера ON имя_таблицы

[WITH ENCRYPTION]

FOR {INSERT | UPDATE | DELETE} [,…]

[WITH APPAND]

[NOT FOR REPLICATION]

AS

[команды SQL]

[RETURN]

Синтаксические компоненты имеют следующий смысл:

  • Имя_триггера — определяет имя объекта с необязательным включением имени владельца (например, mytrigger или dbo.mytrigger).

  • Имя_таблицы — определяет имя таблицы, для которой срабатывает триггер. Обратите внимание, что таблица может быть лишь одна.

  • INSERT | UPDATE | DELETE — модификация данных, приводящая к сраба­тыванию триггера. При создании триггера можно задать одну, две или три операции. В случае выбора нескольких операций их сле­дует разделить запятыми (INSERT, UPDATE, DELETE).

  • WITH APPAND — триггер добавляется в список триггеров, срабатываю­щих для указанного действия (действий). SQL Server можно на­строить так, что добавление будет происходить автоматически Если SQL Server не настроен таким образом, создание триггера приводит к удалению существующего триггера для данного дей­ствия (действий).

  • NOT FOR REPLICATION — означает, что триггер не выполняется в процессе репликации.

Следующий фрагмент создает триггер, который выводит сообщение при каждой вставке записи в таблицу titles:

CREATE TRIGGER titles_trigger ON titles

FOR INSERT

AS

print 'Record inserted !!!'

RETURN

При создании триггеров необходимо учитывать некоторые второсте­пенные обстоятельства:

  • Если вы задаете владельца триггера, также необходимо задать вла­дельца таблицы (особенность синтаксиса языка).

  • Хотя триггеры во многих отношениях похожи на хранимые проце­дуры, они не получают параметров при вызове и не могут явно вы­зываться или выполняться из программы.

  • Команда CREATE TRIGGER должна быть первой командой в пакете.

  • Триггеры не могут создаваться для представлений. Они действуй лишь в базовых таблицах. Тем не менее, можно создавать представления для таблиц, содержащих триггеры.

  • Триггеры не срабатывают при выполнении команды TRUNCATE TABLE. Команда TRUNCATE TABLE не регистрируется в журнале, а триггеру необходим доступ к информации журнала.

  • Команда WRITETEXT не приводит к срабатыванию триггеров. Эта ко­манда не регистрируется в журнале.

  • Чтобы создать триггер, необходимо либо быть владельцем объекта, либо обладать ролью DB_OWNER или BD_DDLADMIN.

В триггерах запрещены следующие команды SQL: любые команды CREATE; любые команды DROP; ALTER TABLE/ DATABASE; DENY; GRANT; REVOKE; SELECT INTO, TRUNCATE TABLE; UPDATE STATISTIC; RECONFIGURE; LOAD/ RESTORE DATABASE/ TRANSACTION.

Удаление триггеров

Триггеры удаляются командой DROP TRIGGER, имеющей следующий син­таксис:

DROP TRIGGER имя_триггера [, имя_триггера,[,...] ]

Команда удаляет триггер с заданным именем. При замене триггеров команда DROP TRIGGER не нужна. Чтобы заменить существующий триггер, достаточно не указывать ключевые слова WITH APPAND при созда­нии нового триггера.

Существуют особые представления журнала — таблицы inserted и deleted которые открывают доступ к образам, данным до и после модификации.