Таблицы могут иметь несколько триггеров для любого действия. Сервер SQL позволяет вкладывать несколько триггеров на одну таблицу. Каждый триггер может быть объявлен для нескольких или одного действия.
Владелец таблицы может указывать первый и последний триггеры. Когда несколько триггеров помещены на таблицу, владелец может использовать процедуру sp_settriggerorder для указания первого выполняемого триггера и последнего. Порядок остальных триггеров не может устанавливаться.
Вы должны обладать правами на все используемые объекты.
Владельцы таблицы не могут создавать триггеры на просмотрщики и временные таблицы. Однако, триггеры могут ссылаться на просмотрщики и временные таблицы.
Владельцы таблицы могут создавать триггеры INSTEAD OF на таблицы и просмотрщики.
Триггеры не должны возвращать результирующих наборов. Триггеры могут возвращать результирующие наборы, но это не рекомендуется, потому что пользователи не увидят этого результата при выполнении INSERT, UPDATE или DELETE.
Триггеры могут иметь многострочные действия.
Для определения, сколько строк подлежат воздействию, используйте функцию @@ROWCOUNT.
В этой секции описывается процесс создания, обновления и удаления триггеров. Здесь также описываются необходимые права и рекомендации, которым надо следовать при объявлении триггеров.
Для создания триггеров используйте оператор CREATE TRIGGER. В операторе указывается таблица, для которой объявляется триггер, событие, для которого триггер выполняется и индивидуальные инструкции для триггера.
Синтаксис:
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
Когда определяется FOR UPDATE действие, опция IF UPDATE(имя колонки) может использоваться для фокусирования действия на определённую колонку, которая обновляется.
Опции FOR и AFTER имеют общий синтаксис создания схожего типа триггера, который вызывается после инициализации действий добавления, обновления или удаления.
Триггеры INSTEAD OF отменяют действие триггера и выполняют взамен новую функцию.
Когда вы создаёте триггер, информация о триггере вставляется в системные таблицы sysobjects и syscomments. Если триггер создаётся с таким же именем, как и существующий, новый триггер перезаписывает существующий.
Сервер SQL не поддерживает добавления триггеров объявлённых пользователем на системные таблицы, поэтому вы не можете создавать их для системных таблиц.
Сервер SQL не позволяет использовать следующие операторы в объявлении триггера:
ALTER DATABASE
CREATE DATABASE
DISK INIT
DISK RESIZE
DROP DATABASE
LOAD DATABASE
LOAD LOG
RECONFIGURE
RESTORE DATABASE
RESTORE LOG
Для определения таблиц с триггером, выполните процедуру sp_depends. Для просмотра объявления триггера используйте sp_helptext. Для определения, какие триггеры существуют на определённую таблицу, и на какие действия выполните процедуру sp_helptrigger.
Пример
Следующий пример создаёт триггер на таблицу Employees, который запрещает пользователю удалять более чем одного работника за одну операцию. Триггер срабатывает каждый раз, когда удаляется какая-нибудь запись или группа записей. Триггер проверяет количество записей удалённых запросом. Если удаляется более одной строки, то пользователь увидит сообщение и транзакция будет отменена.
USE ClassNorthwind
GO
CREATE TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT (*) FROM Deleted)>1
BEGIN
RAISERROR('Вы не можете удалить более одной строки', 16,1)
ROLLBACK TRANSACTION
END
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.