現在、2つのSQLデータベースがあり、2つのデータベースの各テーブルのデータの変更を比較する必要があるシナリオを扱っています。データベース間にはまったく同じテーブルがありますが、それぞれのデータが異なる場合があります。私が抱える最初のハードルは、データセットを比較する方法です。2番目の課題は、違いを特定したら、たとえば、データベース2にないデータを更新する方法です。たとえば、1に存在する可能性があります。
4 に答える
車輪を再発明する代わりに、SQL データ比較を使用してみませんか? 2 つのデータベースを比較し、どちらの方向にも同期するスクリプトを作成します。私はいくつかのツールと競合するベンダーで働いていますが、それでも私が推奨するツールです。
http://www.red-gate.com/products/sql-development/sql-data-compare/
データを比較する強力なコマンドの 1 つにEXCEPT
. これにより、次の操作を行うだけで、同じ構造を持つ 2 つのテーブルを比較できます。
SELECT * FROM Database1.dbo.Table
EXCEPT
SELECT * FROM Database2.dbo.Table
これにより、Database1 には存在するが Database2 には存在しないすべての行が表示されます。これには、両方に存在するが異なる行も含まれます (すべての列を比較するため)。次に、クエリの順序を逆にして、他の方向を確認できます。
違いを特定したら、INSERT
またはを使用UPDATE
して、一方から他方に変更を転送できます。たとえば、主キー fieldPK
があり、新しい行が Database2 にのみ入ると仮定すると、次のようにすることができます。
INSERT INTO Database1.dbo.Table
SELECT T2.*
FROM Database2.dbo.Table T2
LEFT JOIN Database1.dbo.Table T1 on T2.PK = T1.PK
WHERE T1.PK IS NULL -- insert rows that didn't match, i.e., are new
使用される実際の方法は、2 つのテーブルがどのように関連付けられているか、一致する行を特定する方法、および変更のソースが何であるかによって異なります。
Visual Studio 2010(Premium以降)のデータ比較機能も確認できますか?これを使用して、すべての環境(つまり、開発、テスト、本番)の構成テーブルが同期していることを確認します。それは私の人生を非常に楽にしてくれました。比較するテーブルを選択したり、比較する列を選択したりできます。私がやることを学んでいないのは、将来の使用のために選択を保存する方法です。
SQL Compare を使用してこれを行うことができますが、これは開発にも適していますが、スケジュールに基づいてこれを行いたい場合は、Simego の Data Sync Studio を使用することをお勧めします。i3 iMac(ブートキャンプ)の16GBで約100m(幅30列)の行比較ができることを私は知っています。実際には片側1m→20m列で快適です。列ストレージ エンジンを使用します。
このシナリオでは、シナリオのダウンロード、インストール、およびテストに数分しかかかりません。
誰かが何を求めているかを理解するために常に疑問符を探しているので、これが役立つことを願っています.