如何确定表的多个触发器的优先级?
-
01-07-2019 - |
题
我想保留桌子上的几个触发器 分离 并希望优先考虑它们。
我可以只有一个触发器并在那里执行逻辑,但我想知道是否有一种更简单/合乎逻辑的方法来实现这一点,即按预定义的顺序进行操作?
解决方案
使用 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 定义表上每个触发器的顺序。
但是,我认为使用一个可以执行多项操作的触发器会更好。这是 特别 因此,如果顺序很重要,因为如果您有多个触发器,那么重要性不会很明显。想象一下有人试图在几个月/几年后支持数据库。当然,在某些情况下,您可能需要有多个触发器,或者它确实是更好的设计,但我开始假设您应该有一个触发器并从那里开始工作。
请记住,如果您更改触发顺序,其他人可能会稍后过来并再次重新排列。您将在哪里记录触发顺序应该是什么,以便维护开发人员知道不要弄乱顺序,否则事情会崩溃?如果两个触发器任务必须按特定顺序执行,唯一安全的途径是将它们放在同一个触发器中。
不隶属于 StackOverflow