私は現在、2つのSQLデータベースを持っているシナリオを扱っており、2つのデータベースの各テーブルのデータの変更を比較する必要があります。データベースはそれらの間に同じ正確なテーブルを持ちますが、それぞれに異なるデータを持つことがあります。私が持っている最初のハードルは、データセットをどのように比較すればよいのかと、2番目にある課題は、差異を特定した後にデータベース1に存在していた可能性のあるデータベース2に欠けている更新データをどうすればいいでしょう。SQL Serverデータベースを比較して別のデータベースを更新するにはどうすればよいですか?
答えて
ホイールを再発明するのではなく、SQLデータ比較を使用してみませんか?あなたが求めていることを正確に行います - 2つのデータベースを比較し、どちらの方向にも同期するスクリプトを作成します。私は彼らのツールのいくつかと競合するベンダーのために働き、それは私がお勧めするものです。
http://www.red-gate.com/products/sql-development/sql-data-compare/
SQLデータの比較とSQLのRedgateとの比較は、優れた製品です。私はそれらを定期的に使用し、コードの展開やデータのマージの際に何時間も節約できました。 –
@Aaron Bertrand - 優れた製品のようですが、無料の代替品はありますか? – PeanutsMonkey
おそらくありますが、単純なウェブ検索ではそれを受け入れるだろうが、私はそれらのどれも試したことがありません。多分誰かが無料の代替手段を使っていて、コメントすることができます。 –
データを比較する強力なコマンドは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
、そして新しい行を持っていると仮定すると、あなたのような何かをするかもしれません一致する行を特定し、変更の原因となるものを特定します。
ありがとう。データベースが非常に大きいので、どのくらい速くクエリを速度にすることも本質的ですか?次に、一度に1つのテーブルとは対照的に、テーブルのリストを比較できる方法はありますか? – PeanutsMonkey
クエリは、すべてのデータを読み取るために必要なスキャンと同じくらい速い場合があります。私が知っている魔法はこれよりも速くすることはできません。うまくいけば、これはあなたが毎日やっている仕事の種類ではなく、2分か5分かどうかに関係なく問題になる状況ではありません。 –
潜在的に 'bcp'を使って、あるサーバからもう1つは一時的なテーブルのデータダンプとして本当にすばやくです。次に、実際の更新を一時表から実表にローカルで実行します。しかし、@ AaronBertrandの答えは全体的にはるかに良い提案です。 – mellamokb
また、Visual Studioの2010(プレミアム以上)での機能の比較データを見ることができますか?私は、すべての環境(すなわち、開発、テスト、生産)における構成表が同期していることを確認するために使用します。それは私の人生を非常に簡単にしました。 比較する表を選択して、比較する列を選択することができます。私がやったことは、将来の使用のために私の選択を保存する方法です。
これはSQLの比較でも可能ですが、これも開発には最適ですが、これをスケジュールどおりに実行したい場合は、Simegoのデータ同期スタジオが適しています。 i3 iMac(bootcamp)の16GBと比較して約100m(30列幅)の行を実行できることはわかっています。実際には、両側に1m - > 20mの列で快適です。これは、列ストレージエンジンを使用します。
このシナリオでは、シナリオのダウンロード、インストール、およびテストに数分かかります。
私はいつも誰かが求めているものを解決するために疑問符を探すので、これが助けてくれることを願っています。
- 1. SQL Serverデータベース比較ツール
- 2. データベースとのデータの比較はどのようにですか?
- 3. あるSQL Serverデータベースから別のSQL Serverデータベースにテーブルを転送するにはどうすればよいですか?
- 4. SQL Server - 別のデータベースのスキーマの更新
- 5. Sql Server CE 3.5 sdfデータベースをSql Server CE 4.0にアップグレードするにはどうすればよいですか?
- 6. C#を使用してSQL Serverデータベースにハッシュを格納するにはどうすればよいですか?
- 7. SQL Serverデータベースの変更をロックするにはどうすればよいですか?
- 8. SQL Server 2008 ExpressでSQL Server 2000データベースを開くにはどうすればよいですか?
- 9. SQLデータベースでこのフィールドを更新するにはどうすればよいですか?
- 10. データベースが更新されたときにページを更新するにはどうすればよいですか?
- 11. Javaのデータベースとフラットファイルの値を比較するにはどうすればよいですか?
- 12. SQL Serverで時刻を比較するにはどうすればよいですか?
- 13. ファイルの署名と署名データベースを比較するにはどうすればよいですか?
- 14. 提出中のテキスト領域をデータベースと比較するにはどうすればよいですか?
- 15. SQL Server 2008データベースのSQLダンプを取得するにはどうすればよいですか?
- 16. SQL Server Management StudioでSQL CEデータベースを管理するにはどうすればよいですか?
- 17. SQL Serverの新しいデータベース
- 18. カタログを簡単に更新できるデータベースにするにはどうすればよいですか?
- 19. SQL Server 2008のpubsまたはnorthwindデータベースをインストールするにはどうすればよいですか?
- 20. SQL Serverデータベースのデバッグバージョンはどのように管理されていますか?
- 21. DataTableにバインドされたSQL Server CEデータベースを更新する
- 22. 挿入/更新時にデータベースの変更を確認するにはどうすればよいですか?
- 23. データベースの変更後にListViewを更新するにはどうすればよいですか?
- 24. SQL Serverでデータベースをプログラムで作成するにはどうすればよいですか?
- 25. SQL Serverデータベースでユーザー定義型を一覧表示するにはどうすればよいですか?
- 26. SQL Serverデータベース間で図を移動するにはどうすればよいですか?
- 27. コンティンジェンシーテーブルをSQL Serverデータベースに挿入するにはどうすればよいですか?
- 28. アラビア文字をSQL Serverデータベースに挿入するにはどうすればよいですか?
- 29. VB.NetでSQL Serverデータベースを動的に更新します。
- 30. アクティブレコードとnhibernateを使用してSQL Serverデータベースのスキーマを更新するには?
このユーザーデータまたは静的データですか。つまり、1つのデータベースのテーブルを消去し、定期的に他のデータベースからテーブルをコピーできますか? – mellamokb
@mellamokb - あなたがユーザーデータを言うとき、正確にはどういう意味ですか?データベース1のデータは、一般的にはウェブインタフェースを介して動的に更新されますが、オフサイトであるとみなして、私は静的と考えると同じデータベースを内部的に更新できる必要があります。私がデータベースを拭いて再び書き込むのではなく、変更を識別できるのは、変更を第3のデータベースに渡す必要があるからです。 – PeanutsMonkey
これは一度だけのことですか、繰り返す必要がありますか? –