トリガーを使用したり、データベースの構造を変更したりせずに、SQL Serverデータベースのテーブルへの変更を監視するにはどうすればよいですか?私が好むプログラミング環境は.NETとC#です。
SQL Server2000SP4以降をサポートできるようにしたいと思います。私のアプリケーションは、他社製品のボルトオンデータ視覚化です。私たちの顧客ベースは数千人にのぼるので、インストールのたびにサードパーティベンダーのテーブルを変更するという要件を課す必要はありません。
「テーブルへの変更」とは、テーブル構造の変更ではなく、テーブルデータの変更を意味します。
最終的には、変更を定期的にチェックするのではなく、アプリケーションでイベントをトリガーするように変更したいと思います。
私の要件(トリガーやスキーマの変更なし、SQL Server 2000および2005)を考えると、最善の行動はT-SQLBINARY_CHECKSUM
の関数を使用することのようです。私が実装する予定の方法は次のとおりです。
X秒ごとに、次のクエリを実行します。
SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
そして、それを保存された値と比較します。値が変更された場合は、クエリを使用してテーブルを1行ずつ調べます。
SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
そして、返されたチェックサムを保存されている値と比較します。