而不是触发器 - 它们可以与常规触发器共存

时间:2010-06-10 20:42:02

标签: sql-server

可以替代触发器与常规触发器共存吗?如果是这样,我们应该注意哪些潜在的问题?

2 个答案:

答案 0 :(得分:5)

INSTEAD OF个触发器可以与普通触发器共存。我做得很好。

INSTEAD OF触发器存在许多潜在问题,主要是因为它们用您定义的任何内容替换正常的插入/更新/删除行为。开发人员可能不会想到UPDATE User SET Address = 'foo' WHERE UserID = 4,但如果您的触发器使用它作为触摸十几个身份验证表的钩子,并且可能与世界各地的服务器通信,那么您自己就会给自己带来很多潜在的混淆。 / p>

保持这些触发器的行为与IUD语句的预期行为一致。不要做太多。

INSTEAD OF触发器是一个非常强大的工具,很容易被滥用。适当而周到地使用它们。

答案 1 :(得分:1)

我没有发现任何关于同时使用INSTEAD OFAFTER(AKA FOR)触发器的问题。 INSTEAD OF触发器的主要问题是:

  • 每个操作每个操作只能有一个INSTEAD OF触发器;
  • 他们可以搞乱OUTPUT INTO条款(即你的身份值为0);
  • 如果您对表格进行任何架构更改,如果您不小心保持触发器,将来某些时候可能会神秘地破坏。

这些警告都与AFTER触发器无关,所以在这方面你没有什么可担心的。虽然我会说在视图而不是表上编写INSTEAD OF触发器更常见,因为它们干扰表操作的可能性较小。它们主要被设计为帮助您创建可插入/可更新视图的工具。

无论如何,如果你小心的话,你会没事的,但我仍然建议不要使用INSTEAD OF触发器,除非你实际上需要,因为它们通常会使操作变得更加困难推理。