1. ホーム
  2. sql

[解決済み] SQL Server テーブルへの変更をチェックしますか?

2022-05-06 08:59:26

質問

トリガーを使用したり、データベースの構造を変更することなく、SQL Serverデータベースのテーブルへの変更を監視するにはどうすればよいですか?私が使用しているプログラミング環境は .NET とC#を使用しています。

任意の SQL Server 2000 SP4以降。私のアプリケーションは、他社製品のデータ可視化をボルトオンで行うものです。当社の顧客は数千人規模なので、インストールのたびにサードパーティベンダーのテーブルを修正するような要件は入れたくありません。

By "テーブルへの変更" テーブルの構造の変更ではなく、テーブルのデータの変更を意味しています。

最終的には、一定期間ごとに変更をチェックするのではなく、変更がアプリケーションのイベントをトリガーするようにしたいのです。


私の要件(トリガーやスキーマの変更なし、SQL Server 2000と2005)を考慮すると、最適な方法は BINARY_CHECKSUM 関数を使用します。 T-SQL . 私が計画している実装方法は、このようなものです。

X秒ごとに以下のクエリを実行する。

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);

そして、保存されている値と比較します。値が変更されている場合は、クエリを使用してテーブルを1行ずつ調べます。

SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);

そして、返されたチェックサムを保存されている値と比較します。

どのように解決するのですか?

CHECKSUMコマンドを見てみましょう。

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM sample_table WITH (NOLOCK);

これは、テーブルの内容が変更されていない限り、実行するたびに同じ番号を返します。詳しくは、この件に関する私の投稿を参照してください。

CHECKSUM

以下は、テーブルが変更されたときに、キャッシュの依存関係を再構築するために使用した方法です。

ASP.NET 1.1 データベースキャッシュの依存関係(トリガーなし)