Insert into table1(c1, c2) (select c1, c2 from inserted)
End
End
Else
-- Триггер активирован командой DELETE
delete from table1 from deleted d where table1.c3 = d.c3
End
End
go
После выполнения следующей команды SQL:
update table1 set c1 = c1 + 1, c2 = c2 – 1
таблица table1 будет содержать следующие данные:
c1
c2
c3
Если затем выполнить команду SQL:
insert into table1(c1, c2) (select c1, c2 from table1 where c2 = 4)
то таблица table1 будет содержать следующие данные:
c1
c2
c3
В случае выполнения команды SQL:
delete from table1 where c1 = 3
над полученной после предыдущего шага таблицей table1, будет получен следующий результат:
c1
c2
c3
Таким образом очевидно, что написанный триггер trig3 срабатывая вместо соответствующих SQL команд полностью их повторяет.
DDL триггеры.
Пример 4.
Создание простейшего DDL триггера, реагирующего на попытку удаления таблицы table1 и вызывающему в этом случае откат транзакции.
/*
Проверяем наличие DDL триггера (поле parent_type = 0) с выбранным именем и если такой триггер существет, то уничтожаем его, учитывая, что он имеет уровень БД. В случае создания DDL триггера уровня сервера проверку его существования и, в случае необходимости, уничтожения нужно было бы осуществлять следующим образом:
if exists(select name from sys.server_triggers where name = 'trig_ddl1')