Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Конструкції for|, after|і instead|of|

При створенні|створінні|тригера|трігера|слід задати тип|тип|події, що викликає|спричиняє|його спрацьовування. Типів події три:INSERT|, UPDATE| і DELETE|.Один і той же тригер|трігер| може спрацювати на одне, два або всі три події. Якщо необхідно, щоб|аби|він спрацьовував на всі події, то після|потім|конструкційFOR|, AFTER|абоINSTEAD| OF|слід помістити всі три ключові|джерельні|слова:INSERT|, UPDATE| і DELETE|у будь-якому порядку. Наприклад, наступний|слідуючий|код TRANSACT-SQL|примушує|заставляє|тригер|трігер|Alerter|спрацьовувати на всі події:

CREATE TRIGGER dbo.alerter

ON dbo.employees

FOR INSERT, UPDATE, DELETE

Конструкція FOR|- синонімAFTER|. Тому приведений вище код створюєALTER|тригер|трігер|. Щоб|аби|створити тригер|трігер|Alerter|якINSTEAD| OF|, використовуйте наступний|слідуючий|код:

CREATE TRIGGER dbo.alerter

ON dbo.employees

INSTEAD OF INSERT, UPDATE, DELETE

Зверніть увагу, що замість конструкції FOR|застосовується конструкціяINSTEAD| OF|.

Конструкція as|

Конструкція AS|і наступні|слідуючі|за нею команди мови|язика|TRANSACT-SQL|визначають завдання|задачу|, яке виконуватиме тригер|трігер|. Нижче наводиться приклад створення|створіння|тригера|трігера|Alerter|, який посилає по електронній пошті повідомлення|сполучення|користувачаHello, якщо в таблиціemployees|відбуваються|походять|подіїINSERT|,UPDATE|або DELETE|:

USE BookShopDB

GO

CREATE TRIGGER dbo.alerter

ON dbo.employees

AETER INSERT. UPDATE, DELETE

AS

EXEC master.xp_sendmail 'Hello'.

'A record was just inserted, updated or deleted in the Employees table'

GO

|

Приклад|зразок|ми спростили, щоб|аби|ясніше продемонструвати створення|створіння|завдання|задачі|у тригері|трігері|. Є декілька способів зробити результати завдання|задачі|кориснішими. Наприклад, запрограмувати завдання|задачу|так, щоб в поштовому повідомленні|сполученні|відображувалися|відображали|докладні|детальні|відомості про внесені зміни.

Управління тригерами|трігерами|

Тригери|трігери|— це потужні|могутні|об'єкти бази даних, які автоматично виконуються при модифікації таблиці або відображення|вистави|. Для управління тригерами|трігерами|призначена низка|низка|команд і інструментів баз даних. Тригери можна:

  • модифікувати за допомогою оператора ALTER| TRIGGER|;

  • перейменувати засобами|коштами|системної збереженої процедуриsp_rename|;

  • проглянути шляхом запиту системних таблиць або з використанням системних збережених процедур sp_helptrigger|абоsp_helptext|;

  • видаляти|віддаляти|за допомогою оператораDROP| TRIGGER|;

  • включити або вимкнути за допомогою конструкцій DISABLE| TRIGGER|іENABLE| TRIGGER|оператораALTER| TABLE.|

Зміна і перейменування тригерів

Для модифікації тексту тригер|трігер|можна видалити|віддаляти|і відтворити з|із|новим текстом. Інший спосіб, без видалення|віддалення|, полягає у використанні оператораALTER| TRIGGER|. Синтаксис цього оператора аналогічний синтаксису оператораCREATE| TRIGGER|, але|та|ALTER| TRIGGER|не видаляє|віддаляє|тригер|трігер|з|із|системних таблицьSysComments|іSysObjects|. У наступному|слідуючому|прикладі|зразку|показано, як модифікувати тригер|трігер|Alerter|так, щоб він повідомив тільки|лише|про оновлення записів в таблиціEmployees|:

ALTER TRIGGER dbo.alerter

ON dbo.employees

AFTER UPDATE

AS

EXEC master..xp_sendmail 'Barry"

'A record was just updated in the Employees table.'

GO

Зверніть увагу, що після|потім|конструкціїAFTER|вказана тільки|лише|одне подіяUPDATE|, а також зверніть увагу на зміни в тексті повідомлення|сполучення|.

Інколи|іноді|нові угоди про іменування вимагають перейменувати тригер|трігер|, це також буває необхідно при реалізації в таблиці декількох тригерів|трігерів|. Для перейменування тригера|трігера|застосовують системну збережену процедуруsp_rename|. У наступному|слідуючому|прикладі|зразку|показано, як перейменувати тригер|трігер|Alerter|вEmpAlerter|:

sp_rename @objname = alerter @newname = empalerter

Зверніть увагу, що в синтаксисі перейменування не вказаний dbo|. Системна збережена процедураsp_rename|не дозволяє передати тригер|трігер|іншому власникові. Щоб|аби|змінити|зраджувати|власника тригера|трігера|, слід використовувати оператораCREATE| TRIGGER|. Перейменувавши вкладений тригер|трігер|, обов'язково модифікуйте і тригер, який його викликає -|трігер|у ньому має бути вказане вірне ім'я вкладеного тригера|трігера|.