Sql 设置触发器顺序用法

Sql 设置触发器顺序用法,sql,sql-server,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,我们可以使用sp_settriggerorder命令将触发器的顺序选项设置为first、last或none。我想知道设置触发顺序的意义。什么时候需要使用这个选项 当多个触发器应用于一个SQL语句时,我使用SQLServer2008R2以触发器触发后的顺序使用。对于特定的表、数据库或服务器,您只能指定一个第一个或最后一个触发器。一个目的是,如果希望一个触发器在触发其他触发器(可能具有昂贵的操作)之前执行某种形式的健全性检查。如果第一个触发器导致发生回滚,则不会触发其他触发器: create tab

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


当多个触发器应用于一个SQL语句时,我使用
SQLServer2008R2

以触发器触发后的顺序使用。对于特定的表、数据库或服务器,您只能指定一个第一个或最后一个触发器。

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

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.

按顺序执行触发器似乎没有什么区别。你能举一个例子来描述集合触发器订单的成本吗?我不太明白你的意思。应用触发顺序的成本可以忽略不计。