0

我们可以通过使用sp_settriggerorder命令将触发器的 order 选项设置为 first、last 或 none。我想知道设置触发顺序有什么意义。什么时候需要使用这个选项?

我用SQL Server 2008 R2.

4

2 回答 2

2

一个目的是,如果您希望一个触发器在其他触发器(可能具有昂贵的操作)触发之前执行某种形式的健全性检查。如果first触发器导致 aROLLBACK发生,则不会触发其他触发器:

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.
于 2012-07-09T07:07:01.330 回答
0

它指定当多个触发器应用于 SQL 语句时触发器触发的顺序。您只能为特定表、数据库或服务器指定一个第一个或最后一个触发器。

于 2012-07-09T06:27:39.167 回答