2016-07-11 5 views
0

テーブル内のデータが最後に変更された時刻(データの挿入、作成、削除)を知る必要があります。一般的な答えは、sys.dm_db_index_usage_statsからデータを抽出することですが、そのテーブルにアクセスすることはできません。理解できるように、そのアクセスはサーバーレベルのアクセス許可です。これは企業の共有サーバー上にあるためです。私のアクセスを許可しているIT部門のオッズは、豚が飛んでいるところです。SQL Server - テーブルの最終更新時刻を取得

この情報を取得する方法はありますか?大幅に昇格された特権は必要ありませんか?


更新#1

いくつかの追加情報:私がやっている何を、局部的にこのテーブルの内容をキャッシュし、私のローカルキャッシュを更新する際に知っておく必要があります。これが意味:

  1. を私は、この値が変更された場合
  2. 「キャッシュを更新し、物事が変更されている」実際のタイムスタンプ、私は私に語っローカルにキャッシュされた値と比較することができますだけで任意の値を必要としませんあまりにも頻繁に(例えば、彼らは非常にまれにしかありません、サーバーを再起動するたびにリセット取得)、それはOKですが、それはちょうど私が私が実際に

更新#を行う必要はありませんでした余分なキャッシュの更新を行うこと2

私はこれを早い段階でやっていたはずですが、必要に応じてテーブルを作成できると仮定しましたが、そうではありません。許可は与えられていません。だから、提案されている方法のいずれも

:-(動作します。ここに私の新しい考えがあります:私は

select checksum_agg(binary_checksum(*)) 

を呼び出し、全体のリモートテーブル上のチェックサムを取得することができ、チェックサムが変化した場合次に、私が知っています。テーブルが変更され、ローカルキャッシュを更新することができます。problems with checksumを見たことがありますが、はるかに複雑でずっと遅くなるようなHASHBYTESサウンドを使用します。

これは問題なく、私はキャッシュ全体をリロードする必要があります。私のテーブルには非常に多くの行があり、1行につきチェックサムを返すのは受け入れられないほど長い時間がかかりますe、 "OVER"節を使用して10個のチェックサム、行の最初の1/10の最初のチェックサムなどを取得する方法はありますか?

+0

あなたのテーブルに 'LastModified'カラムのようなものがないと仮定していますか? – Siyual

+0

修正!そして、それはサードパーティ製の製品によって作成され管理されるテーブルなので、スキーマを変更してそのような列を追加することはできますが、そのような列を維持するためにコードを変更する方法はありません。 –

+0

もしあなたがスキーマを変更してうれしいなら、これらの操作を記録するトリガを追加することができます。 –

答えて

1

スキーマを変更できる場合は、トリガーを追加できる必要があります。

CREATE trigger [dbo].[TR_TheirTable_Timestamp] 
on [dbo].[TheirTable] for update 
as 
begin 
    update 
     dbo.TheirTable 
    set 
     lastmodified=getdate() 
    from 
     Inserted 
    where 
     dbo.TheirTable.UniqueID=Inserted.UniqueKey 
end 

理由私だけ更新のためにそれを行う、およびないを挿入します。あなたはLASTMODIFIED列を追加すると

、いつでもレコードの変更、更新時間を取得するには、このトリガーを使用することができます私は新しいレコードを見ることができ、タイムスタンプは必要ありませんが、変更されたレコードは、レコードを最後に更新した時刻を比較できます。あなたは、挿入、更新をしたい場合は、あなただけのテーブルが更新されたとき、その後、トリガがテーブル名と日付を別のテーブルに書き込むことができ、あなたがwouldn知りたいと思った場合は、

on [dbo].[TheirTable] for insert,update 

を働くだろう彼らのスキーマを変更する必要はありません

関連する問題