Триггеры вставки и обновления
В приведенном ниже примере триггер выполняется всегда, когда в таблицу Sales вставляется строка или выполняется ее модификация. Если дата заказа не находится в пределах первых 15 дней месяца, строка в таблицу не включается.
CREATE TRIGGER tr_in
ON Sales
FOR Insert, Update
AS
DECLARE @nDay int
SELECT @nDay = DAY( i.date)
FROM Sales s, Inserted i
WHERE s.s_id = i.s_id
AND s.num = i.num
AND s.title_id = i.title_id
IF @nDay > 15
BEGIN
ROLLBACK TRAN
RAISERROR(‘Сообщение’,16,10)
END
Таблица Inserted создается автоматически при выполнении триггера. В ней содержатся строки, которые необходимо добавить в таблицу БД. Структуры таблиц Inserted и Sales совпадают.
Триггеры удаления
Триггеры удаления обычно применяются в двух случаях:
· Предотвращение удаления строк, которое может вызвать проблемы с целостностью данных.
· Выполнение каскадных операций удаления.
· Могут запрещать удаление данных ряду пользователей.
В качестве примера создадим для таблицы TAB1 триггер DELETE, который будет выводить информацию о попытках удаления, количестве удаляемых строк и запрещать эту операцию всем пользователям, кроме «dbo».
CREATE TRIGGER tr_del
ON TAB1
FOR DELETE
AS
PRINT ‘Попытка удаления ‘+STR(@@ROWCOUNT)+’ строк в таблице TAB1’
PRINT ‘Пользователь - ‘ + CURRENT_USER
IF CURRENT_USER <> ‘dbo’
BEGIN
PRINT ‘Удаление запрещено‘
ROLLBAK TRAN
END
ELSE
PRINT ‘Удаление разрешено‘