我想创建一个触发器来检测SQL Server中的行是否已更改。我当前的方法是遍历每个字段,应用COLUMNS_UPDATED()来检测是否已调用UPDATE,然后最后比较插入或删除的同一行(由PK标识)的该字段的值。
我想消除程序中的循环。可能我可以将插入和删除的内容转储到一个表中,对所有列进行分组,然后选择count = 2的行。这些行将被视为未更改。
最终目标是创建审核跟踪:1)跟踪用户和时间戳2)跟踪插入,删除和REAL更改
任何建议表示赞赏。
可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |