トリガーによって取得される監査テーブルを用意します。ような何か:
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
を使用して、指定された時点より前に行が作成されたかどうかを判断し、その後に削除されるかどうか(まったく削除されないかどうか)を指定します。
EDIT
時間データにポイントの監査テーブルを照会するには、次の
select *
from YourAuditTable
where CreateDate <= @PointInTimeDateTime
and
(
DeleteDate is null or
DeleteDate > @PointInTimeDateTime
)
ありがとうございます!特定の日付にテーブルにあったデータを見るためにこれをどのようにクエリするのですか? –
@I__私の編集をチェックしてください。そのクエリはあなたのために働くはずです。 –
これは信じられないほど単純で驚くほど完璧な解決策です。ありがとうございました –