我想保留桌子上的几个触发器 分离 并希望优先考虑它们。

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

有帮助吗?

解决方案

使用 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 定义表上每个触发器的顺序。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top