Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00
Лекция 22:

Создание и использование триггеров

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

Теперь, когда вы знаете, как создавать триггер, вам надо научиться управлять триггерами. В этом разделе мы рассмотрим сначала управления триггерами с помощью команд T-SQL, а затем – управление с помощью Enterprise Manager.

Управление триггерами с помощью операторов T-SQL

Имеется несколько операторов, с помощью которых можно управлять триггерами. Вы можете просматривать текст триггера, просматривать существующие триггеры по определенной таблице, изменять текст триггера, удалять триггеры и разрешать или блокировать использование триггеров. Все эти возможности описаны в данном разделе.

Просмотр текста триггера

Информацию о триггерах можно получить с помощью двух системных хранимых процедур: sp_helptext и sp_helptrigger. Процедура sp_helptext, после которой указывается имя триггера, используется для вывода на экран текста, который использовался для создания этого триггера. Например, для просмотра определения созданного ранее триггера Print_Update используйте следующий оператор:

USE MyDB
GO
sp_helptext Print_Update
GO

Результаты выглядят следующим образом:

Text 
-------------------------------------------------
CREATE TRIGGER Print_Update 
ON Bicycle_Inventory 
FOR UPDATE 
AS 
PRINT "The Bicycle Inventory table was updated."
Просмотр триггеров, имеющихся по какой-либо таблице

Для просмотра триггеров, существующих по определенной таблице (или чтобы увидеть, что нет ни одного триггера), используйте хранимую процедуру sp_helptrigger, после которой укажите имя этой таблицы. Для просмотра триггеров по таблице MyTable используйте следующий оператор:

USE MyDB
GO 
sp_helptrigger MyTable 
GO

Ниже приводятся результаты:

trigger_name     trigger_owner   isupdate     isdelete  isinsert   isafter   isinsteadof
-----------------------------------------------------------------------------------------------
Print_Update      dbo            1             0          0          1         0
 
(1 row affected)

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

Результирующие колонки isupdate, isdelete, isinsert, isafter и isinsteadof содержат значение 1, если триггер активизируется событием модификации данных, которое указано именем колонки, или 0 в противном случае. Если триггер активизируется более чем одним типом событий модификации данных, то значение 1 может быть в нескольких колонках.

Использование оператора ALTER TRIGGER

Чтобы изменить определение триггера, вы можете удалить и заново создать соответствующий триггер или использовать оператор ALTER TRIGGER. Для этого оператора используется тот же синтаксис, что и для оператора CREATE TRIGGER. Если вы модифицируете триггер, то должны переопределить весь этот триггер. Например, для изменения триггера Print_Update, чтобы он активизировался при выполнении операторов INSERT или UPDATE, которые влияют на таблицу Bicycle_Inventory, используйте следующий текст:

USE MyDB
GO
ALTER TRIGGER Print_Update 
ON Bicycle_Inventory 
FOR UPDATE, INSERT 
AS 
PRINT "Bicycle_Inventory was updated or a row was inserted" 
GO

Теперь старая версия данного триггера не существует; она заменена новой версией. Теперь этот триггер будет активизироваться при изменениях в Bicycle_Inventory и при вставке строк в эту таблицу. Ниже показаны примеры операторов, используемых для выполнения этих операций:

INSERT   INTO Bicycle_Inventory VALUES ("Trek",1,"Lance S.E.",1,0,1)
GO

UPDATE   Bicycle_Inventory
SET        in_stock = 1
WHERE    model_name = "Lance S.E."
GO