6

我在一张桌子上有几个触发器,我想保持分开并希望对它们进行优先级排序。

我可以只有一个触发器并在那里执行逻辑,但我想知道是否有一种更简单/合乎逻辑的方法来实现它以预定义的顺序?

4

4 回答 4

7

使用 sp_settriggerorder。您可以根据操作指定要触发的第一个和最后一个触发器。

MSDN 上的 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 = '数据库';
于 2008-09-18T17:56:12.053 回答
1

这里

于 2008-09-18T17:56:37.577 回答
1

您可以使用sp_settriggerorder定义表上每个触发器的顺序。

但是,我认为最好使用一个触发器来执行多项操作。如果顺序很重要,则尤其如此,因为如果您有多个触发器,则该重要性不会很明显。想象一下有人试图在数月/数年内支持数据库。当然,在某些情况下,您可能需要多个触发器,或者它确实是更好的设计,但我会开始假设您应该拥有一个并从那里开始工作。

于 2008-09-18T18:03:30.307 回答
1

请记住,如果您更改触发顺序,其他人可能稍后会过来重新排列。你会在哪里记录触发顺序应该是什么,以便维护开发人员知道不要弄乱顺序,否则事情会中断?如果两个触发任务肯定必须按特定顺序执行,唯一安全的方法是将它们放在同一个触发器中。

于 2008-09-18T18:11:09.117 回答