如果更新了多行,则仅对Microsoft SQL Server 2005数据库触发一次触发事件?

Dav*_*.ca 2 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
Run Code Online (Sandbox Code Playgroud)

我意识到,如果像这样更新了多行,

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

只触发一次tigger,只更新[inserted]中的第一个.实际上,[inserted]可能有多行(在这种情况下,如果id 1,2,3存在,则为3行).换句话说,不会在每一行触发触发器.是对的吗?

我正在使用Microsoft SQL Server 2005.

Per*_*eck 6

是的,每个语句(不是每行一次)触发一次触发器,使您进行所订阅的更改.如果没有受影响的行,它甚至会触发.

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