sql - 如果更新了多行,Microsoft SQL Server 2005 DB 的触发事件仅触发一次?

标签 sql sql-server sql-server-2005

我有一个表 MyTable,其中的触发器定义如下:

ALTER TRIGGER [MyTableInsertDeleteUpdate] 
  ON  [dbo].[MyTable]
 AFTER  INSERT,DELETE,UPDATE
AS 
DECLARE @id int;
BEGIN
   SELECT @id = ins.id FROM inserted ins;
   IF (@id IS NOT NULL)
   BEGIN
      -- insert a new record to audit table
      PRINT 'inserted/updated id: ' + CAST(@id AS VARCHAR);
   END
END

我意识到如果像这样更新不止一行,

UPDATE MyTable SET name = 'test rows' WHERE id in (1, 2, 3);

跳跳虎只被调用一次,并且只更新 [inserted] 中的第一个。实际上,[inserted] 可能有多行(如果 id 1、2、3 存在,则在本例中为 3 行)。换句话说,触发器不会在每一行上触发。是吗?

我使用的是 Microsoft SQL Server 2005。

最佳答案

是的,每条语句触发一次触发器(而不是每行一次),这会导致您订阅的更改。如果没有受影响的行,它甚至会触发。

http://msdn.microsoft.com/en-us/library/ms189799(SQL.90).aspx

关于sql - 如果更新了多行,Microsoft SQL Server 2005 DB 的触发事件仅触发一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/660432/

相关文章:

mysql - 出现 1045 错误时,如何在 SQL 中导出运行查询的结果?

sql-server - 使用带有 WHERE 中断的 cte UPDATE SET

sql-server - 如何在 SQL Server 2008 中从今天获取一个月前的数据?

.net - 如何从 SQL 触发器执行 .NET 代码?

sql - 是否可以通过密码保护 SQL Server 数据库,即使是服务器管理员?

c# - SQL 服务器 : BCP vs SQLCMD - what is more efficient?

mysql - 根据计数从表中删除条目?

mysql - 选择一个随机行,其中 where 语句花费的时间太长

json - 通过索引变量从 JSON 访问数组对象

sql - 财务期间的日期时间转换