我有一个表 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/