我的幼儿园SQL Server告诉我,在插入和删除的伪表中可能会触发多行触发器.考虑到这一点,我主要编写我的触发器代码,经常导致一些基于游标的cludge.现在我真的只能测试它们一次射击一行.如何生成多行触发器并且SQL Server实际上是否会发送多行触发器?我可以设置一个标志,以便SQL Server只会触发单行触发器吗?
触发器定义应始终处理多行.
取自SQLTeam:
-- BAD Trigger code following: CREATE TRIGGER trg_Table1 ON Table1 For UPDATE AS DECLARE @var1 int, @var2 varchar(50) SELECT @var1 = Table1_ID, @var2 = Column2 FROM inserted UPDATE Table2 SET SomeColumn = @var2 WHERE Table1_ID = @var1
上面的触发器仅适用于inserted表中的最后一行.
这是你应该如何实现它:
CREATE TRIGGER trg_Table1 ON Table1 FOR UPDATE AS UPDATE t2 SET SomeColumn = i.SomeColumn FROM Table2 t2 INNER JOIN inserted i ON t2.Table1_ID = i.Table1_ID