SQL 更新查询导致触发器中有两行

标签 sql sql-server sql-server-2005 triggers sql-update

我使用 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/

相关文章:

php - SQL查询返回字段名但不返回值

sql - 按半小时间隔计算调用次数

sql-server-2005 - SSIS:将 OLE DB 源代码编辑器中的参数传递给表值函数

sql-server-2005 - 在一行 SQL 中有条件地创建全文目录(来自安装程序)

sql - 导入 pg_dump sql 文件时出现语法错误

sql - 为什么 SQL 忽略索引提示并选择不同的索引?

mysql - 过程的 CALL 不断加载,占用高 CPU,并失败

mysql - 选择最频繁的

sql - 选择查询以在 SQL Server 2008 中将日期格式显示为 DAY MMM DD YYYY

sql - 如何将 SQL Server 日期格式转换为 Oracle?