Россия, г. Санкт-Петербург |
Создание и использование триггеров
Управление триггерами
Теперь, когда вы знаете, как создавать триггер, вам надо научиться управлять триггерами. В этом разделе мы рассмотрим сначала управления триггерами с помощью команд 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