触发器插入的行数多于应有的数量

时间:2013-09-26 19:15:12

标签: tsql triggers sql-server-2008-r2

假设我有一个表MyTab:

MyTab(ID, Col1, Col2, Col3,...)

然后我创建了一个删除触发器,如:

CREATE TRIGGER [dbo].[trg_MyTab_Delete]
ON [dbo].[MyTab]
For DELETE AS
begin

  INSERT INTO dbo.DeleteHistory(...)
  SELECT * FROM deleted d;

end

这适用于单行数据删除。但它不适用于批量删除,如

delete from MyTab where ...

如果上面的删除从MyTab中删除10行,则触发器会在DeleteHistory中插入10 * 10 = 100行。

如何解决此问题以使此触发器适用于单行和多行删除?

1 个答案:

答案 0 :(得分:0)

它应该正常工作。请参阅此SQL小提琴进行演示: http://sqlfiddle.com/#!6/90f47/3/2

你还有其他可疑的东西。也许您没有显示实际的触发器代码,也许您正在运行其他触发器或其他东西......很难猜测。