2012-04-20 16 views
1

私は現在、2つのSQLデータベースを持っているシナリオを扱っており、2つのデータベースの各テーブルのデータの変更を比較する必要があります。データベースはそれらの間に同じ正確なテーブルを持ちますが、それぞれに異なるデータを持つことがあります。私が持っている最初のハードルは、データセットをどのように比較すればよいのかと、2番目にある課題は、差異を特定した後にデータベース1に存在していた可能性のあるデータベース2に欠けている更新データをどうすればいいでしょう。SQL Serverデータベースを比較して別のデータベースを更新するにはどうすればよいですか?

+0

このユーザーデータまたは静的データですか。つまり、1つのデータベースのテーブルを消去し、定期的に他のデータベースからテーブルをコピーできますか? – mellamokb

+0

@mellamokb - あなたがユーザーデータを言うとき、正確にはどういう意味ですか?データベース1のデータは、一般的にはウェブインタフェースを介して動的に更新されますが、オフサイトであるとみなして、私は静的と考えると同じデータベースを内部的に更新できる必要があります。私がデータベースを拭いて再び書き込むのではなく、変更を識別できるのは、変更を第3のデータベースに渡す必要があるからです。 – PeanutsMonkey

+0

これは一度だけのことですか、繰り返す必要がありますか? –

答えて

4

ホイールを再発明するのではなく、SQLデータ比較を使用してみませんか?あなたが求めていることを正確に行います - 2つのデータベースを比較し、どちらの方向にも同期するスクリプトを作成します。私は彼らのツールのいくつかと競合するベンダーのために働き、それは私がお勧めするものです。

http://www.red-gate.com/products/sql-development/sql-data-compare/

+0

SQLデータの比較とSQLのRedgateとの比較は、優れた製品です。私はそれらを定期的に使用し、コードの展開やデータのマージの際に何時間も節約できました。 –

+0

@Aaron Bertrand - 優れた製品のようですが、無料の代替品はありますか? – PeanutsMonkey

+0

おそらくありますが、単純なウェブ検索ではそれを受け入れるだろうが、私はそれらのどれも試したことがありません。多分誰かが無料の代替手段を使っていて、コメントすることができます。 –

2

データを比較する強力なコマンドはEXCEPTです。これを使用すると、単純に以下を実行することにより、同じ構造を持つ2つのテーブルを比較することができます。

SELECT * FROM Database1.dbo.Table 
EXCEPT 
SELECT * FROM Database2.dbo.Table 

これはあなたの両方に存在するが、(異なる行を含むDatabase1をではなく、データベース2に存在するすべての行を、与えますそれはすべての列を比較するためです)。次に、クエリの順序を逆にして、他の方向を確認することができます。

差異を特定したら、INSERTまたはUPDATEを使用して変更を一方の側から他方の側に転送できます。二つのテーブルが一緒にどのように関連しているか、どのようにすることができます上で使用

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に入って来る主キーフィールドPK、そして新しい行を持っていると仮定すると、あなたのような何かをするかもしれません一致する行を特定し、変更の原因となるものを特定します。

+0

ありがとう。データベースが非常に大きいので、どのくらい速くクエリを速度にすることも本質的ですか?次に、一度に1つのテーブルとは対照的に、テーブルのリストを比較できる方法はありますか? – PeanutsMonkey

+1

クエリは、すべてのデータを読み取るために必要なスキャンと同じくらい速い場合があります。私が知っている魔法はこれよりも速くすることはできません。うまくいけば、これはあなたが毎日やっている仕事の種類ではなく、2分か5分かどうかに関係なく問題になる状況ではありません。 –

+0

潜在的に 'bcp'を使って、あるサーバからもう1つは一時的なテーブルのデータダンプとして本当にすばやくです。次に、実際の更新を一時表から実表にローカルで実行します。しかし、@ AaronBertrandの答えは全体的にはるかに良い提案です。 – mellamokb

1

また、Visual Studioの2010(プレミアム以上)での機能の比較データを見ることができますか?私は、すべての環境(すなわち、開発、テスト、生産)における構成表が同期していることを確認するために使用します。それは私の人生を非常に簡単にしました。 比較する表を選択して、比較する列を選択することができます。私がやったことは、将来の使用のために私の選択を保存する方法です。

1

これはSQLの比較でも可能ですが、これも開発には最適ですが、これをスケジュールどおりに実行したい場合は、Simegoのデータ同期スタジオが適しています。 i3 iMac(bootcamp)の16GBと比較して約100m(30列幅)の行を実行できることはわかっています。実際には、両側に1m - > 20mの列で快適です。これは、列ストレージエンジンを使用します。

このシナリオでは、シナリオのダウンロード、インストール、およびテストに数分かかります。

私はいつも誰かが求めているものを解決するために疑問符を探すので、これが助けてくれることを願っています。

関連する問題