Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD-КН1.doc
Скачиваний:
18
Добавлен:
27.04.2019
Размер:
7.07 Mб
Скачать

8. Створення та використання тригерів

8.1. Призначення тригерів та особливості їх використання

Тригер – це спеціальний тип процедури, що зерігається, яку SQL Server виконує при операціях додавання, відновлення і знищення (INSERT, UPDATE і DELETE) у даній таблиці. Оскільки тригер застосовується після виконання операції, він являє собою останнє слово в модифікації. Якщо тригер викликає помилку в запиті, SQL Server відмовляється від відновлення інформації і повертає повідомлення про помилку в додаток, що виконує цю дію. Якщо для таблиці визначений тригер, то при виконанні відповідної операції обійти його не можна. І хоча тригер – це різновид збереженої процедури, викликати його безпосередньо не можна – він реагує тільки на подію, для якої визначений.

Найбільш загальне застосування тригера – підтримка цілісності в базах даних. Вони використовуються тоді, коли не можуть бути застосовані стандартні умови на значення (constraints) стовпців чи заснована на таблицях декларативна посилальна цілісність (Declarative Referential Integrity, DRI).

SQL Server розглядає тригер як єдине ціле – як одну транзакцію, що або фіксується, або відкочується, поза залежністю від наявності відповідних операторів у тілі тригера.

8.2. Створення та вилучення тригерів

Для створення тригера необхідно бути власником бази даних і, більш того, власником таблиці, для якої тригер створюється. При додаванні тригера до таблиці змінюється тип доступу, відношення до неї інших об'єктів, тощо. Цей тип операцій зарезервований для власника бази даних і захищений від інших користувачів, що можуть неправильно модифікувати схему БД. Створення тригера дуже схоже на оголошення збереженої процедури і має наступний синтаксис:

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

ON таблиця

[WITH ENCRYPTION]

{

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

[WITH APPEND]

[NOT FOR REPLICATION]

AS

інструкція_SQL [, ... n]

}

{FOR {[ , ] [INSERT] [ , ] [UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

( IF UPDATE (стовпець_1)

[{ AND | OR } UPDATE (стовпець_j)]

[ ... n]

| IF (COLUMNS_UPDATED () {побітовий_оператор} бітова_маска} {оператор_порівняння} бітова_маска_стовпця [ ... n]

}

інструкції_SQL [ ... n]}}

Тригери можна створювати за допомогою SQL Server Enterprise Manager. Для цього:

  1. Запустіть SQL Server Enterprise Manager.

  2. Натисніть правою кнопкою миші на таблиці, для якої хочете створити тригер, і в контекстному меню виберіть команду Task | Manage Triggers

Р ис.8.1. Вікно SQL Server Enterprise Manager для створення тригера

  1. В результаті цих дій з'явиться діалогове вікно (рис.8.1.), в якому можна ввести текст тригера і присвоїти йому ім'я, або вибрати з випадаючого списка ім’я тригера, який створений раніше (рис.8.2).

  2. Після закінчення введення можна виконати перевірку синтаксису і натиснути кнопку ОК для збереження тригера в базі даних.

Рис.8.2. Діалогове вікно для введення тексту тригера

8.3.Тригери вставки і оновлення

Тригери вставки (INSERT) і обновлення (UPDATE) особливо зручні, оскільки вони можуть підтримувати умови цілісності і забезпечувати правильність даних перед їх введенням в таблицю. Звичайно тригери застосовуються для оновлення стовпців відліку часу або для перевірки даних в певних стовпцях на відповідність необхідному критерію.

Приклад створення тригера.

CREATE TRIGGER [IAgeRule] ON [Учасник_рекламної_акції]

FOR INSERT, UPDATE

AS

IF EXISTS(SELECT Код_учасника

FROM inserted WHERE Вік<=18 OR Вік>120)

BEGIN

ROLLBACK TRANSACTION

RAISERROR('Недопустимий вік',16,10)

END

Якщо вік покупця не входить в інтервал від 18 до 120, то на екрані з’явиться повідомлення про помилку і дані не будуть збережені (рис.8.3).

Перевірка вставки

CREATE trigger Проверка_Вставки

on Додаткові_дані

for insert as

declare @count int, @kode int

SELECT @kode = Код_учасника from inserted

select @count = count(Код_учасника) from Учасник_рекламної_акції

where Учасник_рекламної_акції.Код_учасника = @kode

if (@count < 1)

begin

rollback transaction

RAISERROR ('Відсутній учасник рекламної акції', 16, 10)

Даний тригер перевіряє наявність запису в таблиці Учасник_рекламної акції з кодом учасника, який вводимо в полі Код_учасника.

У цьому тригері використовується приклад управління транзакціями, що дозволяють зупинити виконання операцій ROLLBACK TRANSACTION.

Рис. 8.3. Повідомлення про помилку введення даних.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]