Программирование >>  Реализация баз данных 

1 ... 95 96 97 [ 98 ] 99 100 101 ... 162


286 Тряггврм Глаа Э

4. На панели Editor в окне Query внедите и исполните следующий код:

ALTER TRIGGER dbo. Insupdcontrol ON dbo.autnor.

INSTEAD OF INSERT, UPDATE AS

PRINT -Inaeris and updates агэ not allowed at this time.

В результате модификации триггер преобразуется в триггер INSTE-

AD OF, который предотвращает все операции добавления и обновления в таблице Authors. С помощью триггеров этого типа можно временно запретить внесение изменений в таблицу. Для включения и выключения триггеров используют оператор ALTER TABLE.

5. Введите на панели Editor в окне Query и исполните следующий код;

SET NOCOUNT ON

INSERT INTO authors (firstnam.3, lastname. yearborn, yeardied) VALUES i. Max, Doe, 1962, N/A)

SET NOCOUNT OFF

Триггер INSTEAD етываот и выводив щение, в котором говорится, что в данный момент обновление запрещено. Активирован параметр NOCOUNT, поэтому на вкладке Messages панели не выводится сообщение с числом строк, на кото-

ро мияло исполнение запроса.

6. Чтобы убедиться, что в таблицу Authors не добавлено ни одной записи, исполните для

этой таблицы оператор SELECT.

7. На панели Editor в окне Query внедите и исполните следующую команду для запуска

хранимой процедуры:

sp helptext woDjnaireinsupdcontrol

Хранимая процедура выводит содержимое триггера [nsUpdControl. ► Отключение и удаление триггера

1. На панели Editor в окне Query введите и исполните следующий код: ALTER TABLE authors DISABLE mCGFP insupdcontrol

Оператор ALTER TABLE отключает триггер InsUpdControl в таблице Authors.

2. На панели Editor в окне Query введите и исполните код:

INSERT INTO authors (firstname, lastname bom, yeardied)

VALUES Mi:. 1962, K/A)

SELECT * FROM Authors where Firstname = Max

Запись успешна ляется в таблицу Authors, добавленная запись выводится на вкладке Grids панели Results,

3. На панели Editor в окне Query введите и исполните следующий код:

DROP TRIGGER insupdcontrol ndicator, deleteindicator .DELETE authors where firstname = Max

Оператор DROP TRIGGER все три триггера, привязанных к Authors.

Оператор DELETE удаляет запись, ранее добавленную к таблице Authors.



Занятие 2 Создание еров шение ими 287

Резюме

В этом занятии вы научились создавать триггеры с помощью оператора CREATE TRIGGER. При это одимо задать таблицу или представление, к которым будет привязан

триггер, событие или события, вызывающие срабатывание триггера, а также любые ко-

манд ct-SQL, которые должны быть исполнены при срабатывании триггера. Также можно (но не обязательно) задать класс триггера (AFTER или INSTEAD ()1 i. Триггеры класса AFTER (или его синонима FOR) привязываются к таблицам. Триггеры INSTEAD OF разрешено привязывать к таблицам или представлениям, Оператор CREATE

TRIGGER должен быть первым оператором пакета. Для создания триггеров также можно

использовать Enterprise Manager.

Для управления триггерами применяют инструменты и операторы Transact-SQL, а в Enterprise Manager - опцию Manage Triggers. В Query Analyzer триггер модифицируют с помощью оператора ALTER TRIGGER. Для переименования триггера служит системная хранимая процедура sp rename, а для просмотра его содержимого - sp hetptext. Свойства триггера отображаются с помогит,ю системной хранимой процедуры sp he(ptriggeгили функции OBJECTPROPERTY. Триггеры удаляют посредством оператора DROP TRIGGER. Оператор ALTER TABLE позволяет включать и отключать триггеры.



288 Триггеры 9

Занятие 3. Программирование триггеров

Изучив материал этого занятияы сможете:

создавать триггеры, реализующие бизнес-логику в базе данных; < пользоваться псевдотаблицами Inserted и Deleted; применять обычные системные функции в триггерах.

Продолжительность занятия - около 40 минут.

Псевдотаблицы Inserted и Deleted

При срабатывании триггера на события INSERT, UPDATE или DELETE создается одна или несколько псевдотаблиц (также известных как логические таблицы). Можно рассматривать логические таблицы как журналы транзакций для события. Существует два типа

логических таблиц: Inserted и Deleted. Inserted создается в результате события добавления или обновления данных. В ней находится набор добавленных или измененных записей.

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

UPDATE в таблице Authors:

CREATE TRIGGER dbo. updatetables ON dbo. authors

AFTER UPDATE AS

SELECT Description = The Inserted table. SELECT * FROM inserted

SELECT Description = Deleted таЫе: SELECT * FROM deleted

После исполнения простого оператора UPDATE, изменяющего имя автора с Dean на

Denby, срабатывает триггер, который выводит следующие результаты:

The Inserted table:

Straight Denby Oakland CA 94009

The Deleted table:

Straight Dean Oakland CA m.m

После исполнения триггера обновления в таблице Authors триггера) содер-

ЖИТСЯ обновленная запись. При срабатывании триггера возможен откат модификаций таблицы Authors, если в триггере заг рограммированы соответствующие действия. Откат транзакции также предусмотрен для INSERT и DELETE.

При срабатывании триггера на удаление набор удаленных записей помешается в логическую таблицу Deleted. Таблица Inserted не участвует в событии DELETE.

Примечание В пред]дущем примере оператор SELECT использован лишь для наглядности. Никогда не применяйте в операторы, которые результат, если вы не уверены, что этот результат будет обработан приложением, вызвавшим срабатывание триггера.



1 ... 95 96 97 [ 98 ] 99 100 101 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика