【问题标题】:Can I have two different insert triggers on the same table?我可以在同一张表上有两个不同的插入触发器吗?
【发布时间】:2011-12-11 07:04:05
【问题描述】:

它们似乎是允许的,因为我可以看到我的两个插入触发器都列在表下,但名称不同。这是常见的做法还是不好的做法?我正在使用 SQL Server 2005

【问题讨论】:

  • 触发器有什么作用? INSERTED 表未编入索引,因此出于性能原因,合并它们可能会更好。

标签: sql sql-server sql-server-2005 triggers insert-update


【解决方案1】:

是的,每个操作绝对可以有多个触发器,例如AFTER INSERTAFTER UPDATE 等。将单独的关注点拆分为单独的、小的、可管理的代码块确实很有意义。

您不能依赖的一件事是它们将按特定顺序执行 - 触发器确实执行的顺序也不必是稳定的,即每次都相同。

【讨论】:

  • 取决于 RDBMS。 Postgres 保证按名称的字母顺序调用多个触发器。他们声明 SQL 标准(很少遵循)按创建顺序排列。
  • @AndrewLazarus:我指的是 SQL Server(因为 OP 询问过这个),而 SQL Server 没有任何此类功能。感谢您指出这一点!
  • 当然。我经常添加这样的注释,说明人们经常从 Google 登陆。
  • 虽然您可以使用sp_settriggerorder 设置第一个和最后一个触发器。
【解决方案2】:

这是一个很好的做法,因为这样您就可以随着时间的推移将您的更改分解为小(敏捷)块,并相互独立地添加或删除它们。

【讨论】:

  • 顺便说一句,如果我一次插入 2 行或更多行(基本上我正在导入一堆记录),有没有办法可以引用每个插入,或者触发器会为每个插入自动执行?
  • @hmd 触发器将在每次插入之前自动执行,除非您使用批量插入,其中触发器将为每个批量插入命令执行一次。
  • 知道这是一个老问题!在您的触发器中,您始终可以引用一个名为“已插入”的表,其中包含您刚刚插入的所有行(作为插入触发器上的一行或多行)。通过创建游标,您可以遍历每一行并根据需要对它们进行处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多