我们可以通过使用sp_settriggerorder
命令将触发器的顺序选项设置为first,last或none。我想知道设置触发顺序的重要性。当必要时使用这个选项?
我使用SQL Server 2008 R2
。
答案 0 :(得分:2)
一个目的是,如果您希望一个触发器在其他触发器(可能有昂贵的操作)触发之前执行某种形式的健全性检查。如果first
触发器导致ROLLBACK
发生,则不会触发其他触发器:
create table T (
ID int not null
)
go
create trigger T1
on T
after insert
as
RAISERROR('T1',10,1) WITH NOWAIT
go
create trigger T2
on T
after insert
as
RAISERROR('T2',10,1) WITH NOWAIT
go
create trigger T3
on T
after insert
as
RAISERROR('T3',10,1) WITH NOWAIT
go
sp_settriggerorder 'T1','First','Insert'
go
sp_settriggerorder 'T3','Last','Insert'
go
insert into T(ID) values (1)
--T1
--T2
--T3
--(1 row(s) affected)
go
alter trigger T1
on T
after insert
as
RAISERROR('T1',10,1) WITH NOWAIT
ROLLBACK TRANSACTION
go
insert into T(ID) values (2)
--T1
--Msg 3609, Level 16, State 1, Line 1
--The transaction ended in the trigger. The batch has been aborted.
答案 1 :(得分:0)
It specifies当多个触发器应用于SQL语句时,AFTER触发器的触发顺序是什么。您只能为特定表,数据库或服务器指定一个第一个或最后一个触发器。