我们如何确定一个表的多个触发器的优先级?
时间:2020-03-06 14:22:36 来源:igfitidea点击:
我在表上有几个触发器,希望将它们分开,并想对它们进行优先排序。
我可能只有一个触发器并在那里执行逻辑,但是我想知道是否有一种更容易/逻辑的方式来实现此功能,使其以预定的顺序进行?
解决方案
使用sp_settriggerorder。我们可以根据操作指定要触发的第一个和最后一个触发器。
MSDN上的sp_settriggerorder
从上面的链接:
A.设置DML触发器的触发顺序
下面的示例指定触发器uSalesOrderHeader是在Sales.SalesOrderHeader表上执行UPDATE操作之后首先触发的触发器。
USE AdventureWorks; GO sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B.设置DDL触发器的触发顺序
下面的示例指定触发器ddlDatabaseTriggerLog是AdventureWorks数据库中发生ALTER_TABLE事件之后触发的第一个触发器。
USE AdventureWorks; GO sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
看这里。
可以使用sp_settriggerorder定义表上每个触发器的顺序。
但是,我认为我们最好使用一个触发器来完成多项任务。如果顺序很重要,则尤其如此,因为如果我们有多个触发器,那么重要性就不会很明显。想象一下,有人试图在未来几个月/几年内支持数据库。当然,在某些情况下,我们可能需要多个触发器,或者确实是更好的设计,但是我开始假设我们应该有一个触发器并从那里开始工作。
请记住,如果我们更改触发顺序,稍后可能会有其他人过来重新安排。以及我们将在何处记录触发顺序应该是什么,以便维护开发人员知道不要弄乱该触发顺序,否则事情会破裂?如果绝对必须以特定顺序执行两个触发任务,则唯一安全的方法是将它们放在同一触发中。