gpt4 book ai didi

sql server : How to detect changed rows

转载 作者:行者123 更新时间:2023-12-04 23:43:51 25 4
gpt4 key购买 nike

我想创建一个触发器来检测 SQL Server 中的一行是否已更改。我当前的方法是遍历每个字段,应用 COLUMNS_UPDATED() 来检测是否已调用 UPDATE,然后最后比较插入和删除中同一行(由 PK 标识)的该字段的值。

我想消除程序中的循环。可能我可以将插入和删除的内容转储到一个表中,对所有列进行分组,然后选择 count=2 的行。这些行将被视为未更改。

最终目标是创建审计跟踪:1)跟踪用户和时间戳2) 跟踪插入、删除和真实变化

如有任何建议,我们将不胜感激。

最佳答案

您可以使用 BINARY_CHECKSUM 而不是循环比较插入表和删除表之间的整行,然后采取相应行动。

示例

Create table SomeTable(id int, value varchar(100))

Create table SomeAudit(id int, Oldvalue varchar(100), NewValue varchar(100))


Create trigger tr_SomTrigger on SomeTable for Update
as
begin
insert into SomeAudit
(Id, OldValue, NewValue)
select i.Id, d.Value, i.Value
from
(
Select Id, Value, Binary_CheckSum(*) Version from Inserted
) i
inner join
(
Select Id, Value, Binary_CheckSum(*) Version from Deleted
) d
on i.Id = d.Id and i.Version <> d.Version


End

Insert into sometable values (1, 'this')
Update SomeTable set Value = 'That'
Select * from SomeAudit

关于sql server : How to detect changed rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com