gpt4 book ai didi

sql - 使用表审计以获得表的 "snapshots"

转载 作者:行者123 更新时间:2023-12-01 13:25:50 26 4
gpt4 key购买 nike

我需要解决以下问题:

我将在 SQL Server 2008 中创建一个每天都会更改的表。这是一个最多可能有 5000 行和大约 5 个字段的小表。

客户端需要能够以给定时间点的方式查看表中的所有数据。例如“显示 2 周前表格中所有数据的样子”。

有人提到用 http://autoaudit.codeplex.com/ 审计表会解决这个问题。

我的问题:

  1. 是否有涉及简单审计的解决方案?
  2. 如果是这样,那么我将如何使用审计来解决这个问题?
  3. 是否已经存在针对此类挑战的不同解决方案,以便我不必重新发明轮子?

最佳答案

有一个由触发器操作的审计表。像这样的东西:

create table YourAuditTable
(
-- all of your source table's columns
CreateDate datetime not null,
DeleteDate datetime null
)
go

你的触发器看起来像这样:

create trigger AuditYourTable
on dbo.YourTable
after insert, update, delete
as

if exists(select * from inserted)
begin
if exists(select * from deleted)
begin
-- this is for an update
update YourAuditTable
set DeleteDate = getdate()
where YourIDCol in (select YourIDCol from deleted)
end

-- this is just for an insert
insert into YourAuditTable
select *, getdate() as CreateDate
from inserted
end
else
begin
-- this is just for a delete
update YourAuditTable
set DeleteDate = getdate()
where YourIDCol in (select YourIDCol from deleted)
end

go

这将允许您查询您的审计表中的某个时间点。换句话说,只需使用 DATEDIFF 来确定一行是否在给定时间点之前创建,并在它之后删除(或根本不删除)。

编辑

为时间点数据查询审计表:

select *
from YourAuditTable
where CreateDate <= @PointInTimeDateTime
and
(
DeleteDate is null or
DeleteDate > @PointInTimeDateTime
)

关于sql - 使用表审计以获得表的 "snapshots",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826944/

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