设置触发器订单用法

时间:2012-07-09 06:21:10

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我们可以通过使用sp_settriggerorder命令将触发器的顺序选项设置为first,last或none。我想知道设置触发顺序的重要性。当必要时使用这个选项?

我使用SQL Server 2008 R2

2 个答案:

答案 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触发器的触发顺序是什么。您只能为特定表,数据库或服务器指定一个第一个或最后一个触发器。