如何让多个触发器按照自己想要的顺序启动?
触发器启动顺序例子2
我们假设现在需要对触发器1修改一个代码。现在修改代码,然后向表里插入一个新的客户。
|
Drop 触发器1 |
|
drop trigger dbo.tr_customer_1 |
|
创建触发器 1 |
|
create trigger dbo.tr_customer_1 on dbo.customer |
|
插入语句 |
|
insert into dbo.customer default values |
|
全部的代码和结果 |

我们在这里可以看到,触发器的启动顺序已经违反了业务要求,触发器2先于触发器1启动。我们可以使用sp_settriggerorder存储过程来纠正这个情况。
|
纠正代码 |
|
exec sp_settriggerorder @triggername = 'tr_customer_1', |
|
插入语句 |
|
insert into dbo.customer default values |
|
全部的代码和结果 |

触发器的启动顺序已经被改正过来了。
3个以上触发器的启动顺序
如果你有3个触发器,实际上可以对三个触发器启动进行排序,只要指定(首先启动(FIRST)的触发器和最后启动(LAST)的触发器。默认设置里,在已定义的FIRST启动的触发器和LAST启动的触发器之间的触发器并没有一个固定的启动顺序。所以,如果你只有三个触发器,可以通过上述方法设定它们的启动顺序,但是如果有4个或以上的触发器,那么就没有办法了,只能定义第一个和最后一个启动的触发器,而两者之间的触发器就不能强行固定其启动顺序了。
关于触发器要注意的问题
有一点需要注意的:如果你DROP触发器,然后重新创建,或者如果你ALTER触发器,之前对该触发器设置的属性都同样被drop掉了,你将不得不重新执行sp_settriggerorder来重新设置。同样,如果是复制的表,SQL Server Replication会在复制的表中创建FIRST触发器。在这种情况下,一般不应该对这些触发器进行改动,否则可能会造成意想不到的复制结果。
其他选择 - OBJECTPROPERTY
最后要说的是,要定义触发器的启动特性也可以通过OBJECTPROPERTY函数,使用ExecIsFirstInsertTrigger或ExecIsLastInsertTrigger属性。
IT专家网原创文章,未经许可,严禁转载!
- 本文关键词:

