ターゲットデータベースの行をソースデータベースから更新する必要があるかどうかを確認する必要があるシナリオがあります。ソースデータは実際にはビューであり、そのビューからのデータは宛先テーブルにポンピングされます。ソースビューはいくつかの基になるテーブルからデータを収集/ロールアップ/ピボットするので、変更トラッキングをサポートするためにスキーマを変更するのに良い方法はありません。そのため、各行のデータのハッシュを計算し、ビューの一部。次に、宛先テーブルのハッシュ値を比較して、相違点があるかどうかを確認し、それに応じて更新することができます。多くの列を持つ行のハッシュまたはチェックサムを計算する最も効率的な方法は?
私は承知している:
CHECKSUM
BINARY_CHECKSUM
HASHYBYTES
機能。 CHECKSUM()またはBINARY_CHECKSUM()のいずれかが最善の選択肢だと思われますが、50列と100万行以上のビューでどれくらいうまく動作するかはわかりません。また、生成されたチェックサム/ハッシュが編集後でも異なることはないことに気付いていますが、この場合は許容されます。
質問:これを行うにはハッシュ/チェックサムのアプローチが適していますか?その場合、使用するには最高の機能は何ですか?あるいは、問題に近づくために、他にも良い方法がありますか?
(ああ、今のSQL Server 2005上で実行されているが、それは場合に役立ちます私たちはすぐに、2008R2に移動されます。)
考えてくれてありがとう、アーロン。ソースデータベース内のデータのみを更新しています。あなたの '古いシステム'のように、ターゲットのデータが遅れているのを許容することができます。 CHECKSUMの衝突は問題ではありません。特定の行のデータがソース内で変更された場合にのみ注意します。ソースはVIEWであるため、私はROWVERSIONデータ型や変更データのキャプチャが本当に役立つとは思わない。変更トラッキングで複雑なことをする可能性はありますが、おそらく最良の答えはありません。 –
しかし、CHECKSUMの衝突は、変更された行が変更されていない可能性があります。スリムなチャンスが、非常にリアルです。 –