go
/*
Следует отметить, что в MS SQL Server 2005 системная таблица sysobjects отсутствует. Она, как и некоторые другие системные таблицы, включена как представление для совместимости с SQL скриптами, написанными для MS SQL Server 2000, и отображается (имена и количество столбцов не совпадают) в системное представление sys.objects MS SQL Server 2005, которым и рекомендуется пользоваться. Таким образом, вышеприведенный фрагмент кода рекомендуется написать следующим образом:
if exists(select * from sys.objects where name = 'trig1' and
schema_id = (select schema_id from sys.schemas where name = 'dbo')
and type = 'TR')
Drop trigger trig1
go
*/
Create trigger trig1
On table1
After delete
Not for replication
as
Begin
if exists(select c1 from deleted where c1 = 1)
Begin
delete from table1 where c1 = 1
End
End
go
После выполнения команды SQL:
delete from table1 where c2 = 2
триггер будет активирован и в результате его срабатывания таблица table1 приобретет следующий вид:
Следует отметить, что этот триггер будет вызывать себя рекурсивно, т.к. в его теле присутствует команда DELETE, которая будет вызвана в случае удаления из таблицы table1 строчек, содержащих значение 1 в столбце c1. Если по какой-либо причине невозможно (неудобно) запретить рекурсивные вызовы для триггеров (в явном или косвенном виде), а количество этих вызовов необходимо ограничить, то в вышерассмотренном случае можно было бы поступить следующим образом: