【问题标题】:How do you priortize multiple triggers of a table?您如何确定表的多个触发器的优先级?
【发布时间】:2010-09-10 19:58:19
【问题描述】:

我想分开在一个表上有几个触发器,并希望优先处理它们。

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

【问题讨论】:

    标签: sql sql-server-2005 tsql triggers


    【解决方案1】:

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

    sp_settriggerorder on MSDN

    从上面的链接:
    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 = '数据库';

    【讨论】:

      【解决方案2】:

      here

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-24
            • 1970-01-01
            • 2020-06-09
            • 1970-01-01
            • 1970-01-01
            • 2014-02-23
            相关资源
            最近更新 更多