什么时候触发火,什么时候触发火

Nat*_*n W 8 database sql-server audit triggers

关于SQL Server 2005中的触发器的一般性问题.

在什么情况下表触发器被触发,它们不是什么情况?

任何要演示的代码示例都会很棒.

我正在编写一个基于审计的数据库,只是想知道任何可能不会触发我为我的表设置更新,删除和插入的触发器的情况.

我的意思是一个例子,

UPDATE MyTable SET name = 'test rows' WHERE id in (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

以下语句仅触发更新触发器一次.

Eri*_*ric 19

你想什么时候开火?

CREATE TRIGGER AFTER ACTION
Run Code Online (Sandbox Code Playgroud)

在action(insert update delete)被提交之后运行.INSTEAD OF触发触发器代替动作.

带触发器的最大问题之一是,即使没有行受到影响,它们也会在执行操作时触发.这不是一个错误,如果你不小心的话,它可以很快燃烧你.

此外,使用触发器,您将使用inserteddeleted表.更新的行列在两者中.这引发了很多人的了,因为它们不是用来思考的update一个delete,然后insert.

MSDN文档实际上有一个非常深入的讨论,关于何时触发器触发它们以及它们在这里有什么影响.

  • 看一下这个:http://www.sqlfiddle.com/#!6/be3d3/3.我已经看到触发器计划发送给人们的电子邮件.如果你有一个进程闲置地插入或更新很少影响行但只是轮询它的记录,那么这可能会很快烧掉你.根据经验,始终检查触发器中的行是否受到影响! (2认同)
  • @JohnCarpenter - 我还应该提一下:INSERT操作包括inserted表(aka,pseudotable),DELETE操作包括删除的表.只有UPDATE都有(因为在UPDATE期间总是有'before'和'after'). (2认同)

A-K*_*A-K 5

在2008年,您可以使用内置的Change Data Capture

还有很多情况下触发器不会触发,例如:

·删除表.

·表被截断.

·嵌套和/或递归触发器的设置可防止触发器触发.

·数据是批量加载的,绕过触发器.