我使用 SQL Server 2005 并且有以下问题:
在 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
为什么上面的触发器导致审计表中有一行 DelFlag = 'Y'
和一行 DelFalg = 'N'
?
感谢您查看我的问题。
维克拉姆
最佳答案
在幕后,UPDATE 被视为删除旧行并插入新行。因此,当您进行更新时,INSERTED 和 DELETED 记录集都包含数据。
这就是为什么两行从 UPDATE 语句进入审计表的原因。
关于SQL 更新查询导致触发器中有两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491989/