トリガーによって操作される監査テーブルを用意します。何かのようなもの:
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
)