我在一张桌子上有几个触发器,我想保持分开并希望对它们进行优先级排序。
我可以只有一个触发器并在那里执行逻辑,但我想知道是否有一种更简单/合乎逻辑的方法来实现它以预定义的顺序?
我在一张桌子上有几个触发器,我想保持分开并希望对它们进行优先级排序。
我可以只有一个触发器并在那里执行逻辑,但我想知道是否有一种更简单/合乎逻辑的方法来实现它以预定义的顺序?
使用 sp_settriggerorder。您可以根据操作指定要触发的第一个和最后一个触发器。
从上面的链接:
A. 设置 DML 触发器
的触发顺序 下面的示例指定触发器 uSalesOrderHeader 是在 Sales.SalesOrderHeader 表上发生 UPDATE 操作后触发的第一个触发器。
使用 AdventureWorks; 去 sp_settriggerorder @triggername='Sales.uSalesOrderHeader', @order='第一', @stmttype = '更新';
B. 设置 DDL 触发器
的触发顺序 以下示例指定触发器 ddlDatabaseTriggerLog 是 AdventureWorks 数据库中发生 ALTER_TABLE 事件后触发的第一个触发器。
使用 AdventureWorks; 去 sp_settriggerorder @triggername='ddlDatabaseTriggerLog', @order='第一', @stmttype = 'ALTER_TABLE', @namespace = '数据库';
见这里。
您可以使用sp_settriggerorder定义表上每个触发器的顺序。
但是,我认为最好使用一个触发器来执行多项操作。如果顺序很重要,则尤其如此,因为如果您有多个触发器,则该重要性不会很明显。想象一下有人试图在数月/数年内支持数据库。当然,在某些情况下,您可能需要多个触发器,或者它确实是更好的设计,但我会开始假设您应该拥有一个并从那里开始工作。
请记住,如果您更改触发顺序,其他人可能稍后会过来重新排列。你会在哪里记录触发顺序应该是什么,以便维护开发人员知道不要弄乱顺序,否则事情会中断?如果两个触发任务肯定必须按特定顺序执行,唯一安全的方法是将它们放在同一个触发器中。