Следующий код показывает работу триггера:
DELETE FROM Employees WHERE EmployeeID>6
Если вы хотите изменить объявление существующего триггера, вы можете изменить его без удаления и воссоздания. Вы можете изменить и действие, на которое реагирует триггер. Например, если триггер реагирует на вставку, то вы можете изменить его и на изменение.
Вы можете ссылаться в объявлении триггера на объекты, которые не существуют. Если по время создания объявления, какой-то объект не существует, то вы увидите предупреждение.
Синтаксис:
ALTER TRIGGER trigger_name
ON ( table | view )
[ WITH ENCRYPTION ]
{
{ ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ , ]
[ INSERT ] [ , ] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS
sql_statement [ ...n ]
}
|
{ ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ , ] [ UPDATE ] }
[ 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 ]
}
}
Следующий пример изменяет созданный нами ранее триггер. Новая версия позволяет удалять до 6 строк.
USE ClassNorthwind
GO
ALTER TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT (*) FROM Deleted)>6
BEGIN
RAISERROR('Вы не можете удалить более одной строки', 16,1)
ROLLBACK TRANSACTION
END
Вы можете включать и выключать определённый триггер или все триггеры на таблицу. Когда триггер отключён, он всё ещё существует в таблице, однако не выполняется на указанные события. Вы можете отключить триггер с помощью команды ALTER TABLE.
Синтаксис:
ALTER TABLE table
{ENABLE | DISABLE} TRIGGER
{ALL | trigger_name[,..n]}
Для удаления триггера вы можете воспользоваться оператором DROP TRIGGER. Он удаляется автоматически, когда связанная с ним таблица удаляется.
Для выполнения этого действия, вы должны обладать соответствующими правами.
Когда вы создаёте триггеры, очень важно понимать, как они работают. В этой секции обсуждается работа различных триггеров.
Вы можете объявить триггер для выполнения во время вставки данных в таблицу. Когда триггер срабатывает, новые строки добавляются в таблицу триггера и таблицу inserted. Таблица inserted – это логическая таблица, которая содержит копию строк, которые должны быть вставлены в таблицу. Она содержит журнал активности оператора INSERT. Вы можете использовать данные из этой таблицы для определения вставляемых данных. Строки из таблицы inserted всегда дублируют одну или несколько строк таблицы триггера.
Вся активность по изменению данных записываются в журнал, но информация в журнале транзакций не читаема. Однако таблица inserted позволяет вам ссылаться на изменения.
Пример
Следующий пример создаёт триггер в котором происходит сравнение текущего значения с новым:
USE Northwind
GO
CREATE TRIGGER OrdDet_Insert ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitInStock = (P.UnitsInStock - I.Quality)
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID=I.ProductID
Когда срабатывает триггер удаления, удаляемые строки помещаются в таблицу deleted. Это логическая таблицы, которая ссылается на данные журнала из оператора DELETE.
Рассматривайте следующие факты, когда используете триггер удаления:
Когда строки добавляются в таблицу deleted, они ещё существуют в таблице базы данных.
Для таблицы deleted выделяется память, поэтому она всегда в КЭШе.
Триггер удаление не выполняется на операцию TRUNCATE TABLE, потому что эта операция не заносится в журнал и не удаляет строк.
Пример
Следующий пример создаёт триггер для таблицы категорий. Если из категории удалена строка, то соответствующий продукт не имеет скидки и поле Discount устанавливается в 1:
USE Northwind
GO
CREATE TRIGGER Category_Delete ON Categories
FOR DELETE
AS
UPDATE P SET Discount = 1
FROM Products AS P INNER JOIN Deleted AS d
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.