7

我创建了一个on update触发器。

如果我在单个语句中更新表中的 5 条记录,触发器将执行多少次?如果我有多个语句更新单个事务中的记录,它会改变吗?

它是执行 5 次,还是在所有事务完成后只执行一次?

4

3 回答 3

11

这完全取决于您使用的触发器类型。

  • 将针对受 DML 语句影响的每一行触发行级触发器(请注意INSERT,对于基于 aSELECT或使用多行语法一次插入多行的语句也是如此)
  • 语句级触发器将为整个语句触发一次。

Oracle、PostgreSQL 和 DB2 都支持行级和语句级触发器。Microsoft SQL Server 仅支持语句级触发器,MySQL 仅支持行级触发器。

于 2012-07-03T16:20:31.983 回答
4

使用 SQL 2008:如果您正在执行更新 5 行的 1 次更新,则触发器应该只执行一次。

这就是为什么您必须使用表“INSERTED”和“DELETED”才能检测到所有修改的行。

如果您正在执行 5 次更新以更新 1 行,则触发器将执行 5 次。

于 2012-07-03T15:14:16.500 回答
0

考虑到您使用的是 SQL Server,触发器只会在每次更新时触发一次。

如果这不是您想要的,您可以考虑使用不同的更新语句来确保触发器每次都会触发。

你可以看看这个关于 SQL 触发器的教程。它涵盖了一切。

请注意,如果您使用的是 Oracle,则触发器可以基于行。不在 SQL Server 中。

于 2012-07-03T15:13:37.507 回答