2012-07-09 40 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

相關問題