SQL Update查询在触发器中导致两行

Vik*_*ram 3 sql sql-server triggers sql-server-2005 sql-update

我使用SQL Server 2005并有以下问题:

在a上table A,我有一个跟踪任何插入/更新/删除的触发器.跟踪的记录将插入审计表(aAudit)中.当我运行更新时A,我在审计表中看到每个更新的两行,这不是我所期望的.这是我定义的触发器:

ALTER TRIGGER [ATrigger] ON [dbo].[A]
FOR INSERT, UPDATE, DELETE
AS
INSERT INTO [dbo].[aAudit]
([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus])
SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'N', getDate(), 0
FROM inserted

INSERT INTO [dbo].[aAudit]
([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus])
SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'Y', getDate(), 0
FROM deleted
Run Code Online (Sandbox Code Playgroud)

为什么上面的触发器在审计表中导致一行DelFlag = 'Y'和一行DelFalg = 'N'

谢谢你看看我的问题.

维克拉姆

Raj*_*ore 6

在幕后,UPDATE被视为删除旧行并插入新行.因此,当您执行更新时,INSERTED和DELETED记录集都包含数据.

这就是为什么两行从UPDATE语句进入审计表的原因.