2012-07-09 32 views
0

我们可以通过使用sp_settriggerorder命令来设置触发器的命令选项为第一,最后还是无。我想知道设置触发顺序的意义。何时需要使用此选项?我使用SQL Server 2008 R2设置触发命令的使用情况

回答

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. 
0

It specifies当多个触发器应用于SQL语句时,以何种顺序触发AFTER触发器。您只能为特定的表,数据库或服务器指定一个第一个或最后一个触发器。

+0

它似乎是在按订单执行触发器不差。你能说一个描述设置触发器订单成本的例子吗? – 2012-07-09 06:56:38

+0

我不确定我明白你的意思。应用触发器订单的成本可以忽略不计。 – 2012-07-09 09:33:30

相关问题