我们可以通过使用sp_settriggerorder
命令将触发器的 order 选项设置为 first、last 或 none。我想知道设置触发顺序有什么意义。什么时候需要使用这个选项?
我用SQL Server 2008 R2
.
我们可以通过使用sp_settriggerorder
命令将触发器的 order 选项设置为 first、last 或 none。我想知道设置触发顺序有什么意义。什么时候需要使用这个选项?
我用SQL Server 2008 R2
.
一个目的是,如果您希望一个触发器在其他触发器(可能具有昂贵的操作)触发之前执行某种形式的健全性检查。如果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.
它指定当多个触发器应用于 SQL 语句时触发器触发的顺序。您只能为特定表、数据库或服务器指定一个第一个或最后一个触发器。