8

と がtable aありtable bます。(SQL Server 2008)

両方のテーブルのスキーマはまったく同じです。

この質問の目的のために、table a= 私のローカル dev テーブル、table b= ライブ テーブルと考えてください。

UPDATE/DELETE/INSERTテーブル b をテーブル a と同じになるように更新する SQL スクリプト (ステートメントを含む) を作成する必要があります。このスクリプトは、ライブ データベースに展開されます。

これを行うことができる無料のツールはありますか、それとも自分でできる方法はありますか?

おそらく、テーブル内のすべてのフィールドに対してある種の結合を行い、それに基づいて動的 SQL を生成する必要があると考えています。

誰にもアイデアはありますか?

編集

さて、私はこの質問を少し明確にしたいと思いました.

同期する必要があるテーブルは、単純なルックアップ テーブルです。データは非常にシンプルで簡単です。

TABLE A以下は、どのように見えるかのアイデアです。

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           0

TABLE B以下は、どのように見えるかのアイデアです。

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           1

基本的に、同じ IdFooの対応する値と一致するようにそのBIT列 ( IsFoo) を更新するだけです。TABLE BTABLE A

次の点に注意してください。

  • TABLE A私のローカルマシンにあります
  • TABLE Bライブサーバーにあります

明らかに、スクリプトを作成する必要があるローカル マシンの (信頼できる) バックアップがTABLE Bあり、ライブ サーバーでスクリプトを実行します。

テーブルには参照整合性もあります (表示されなかった他の列)。つまり、すべてを削除してTABLE Bから挿入することはできませんTABLE A

このスクリプトは 1 回限りです。したがって、リンクサーバー、レプリケーションなどを行う必要はありません。皆さんの回答に感謝します。=)

編集:

わかりました-それで、オレグの答え(VS2010データ比較)に行きました。すばやく、簡単に、魅力的に機能します。

他の答えが間違っているとは言いません。すべての答えに感謝します!

4

12 に答える 12

5

テーブルを同期したいだけで、事前に変更を確認する必要がない場合は、MERGEコマンドでこれを行うことができます。

MSDN - マージ (Transact-SQL)

(無料の) Microsoft SSDT にもデータ比較と同期が組み込まれていますが、Redgate データ比較などの有料ツールよりも制限があります。

于 2010-06-10T08:02:45.947 に答える
5

非常に単純なケースでは、ローカル SQL Server で新しいリンク サーバーを定義し (Microsoft SQL Server Management Studio の「サーバー オブジェクト」/「リンク サーバー」を参照)、使用INNER JOINOUTER JOINて A テーブルと B テーブルの違いを見つけることができます。 .

実際のより複雑な状況では、参照整合性、さまざまな外部キー、および宛先データベースに存在する ID (自動インクリメンタル) フィールドを考慮する必要があるため、更新スクリプトはより複雑になります。そのため、開発者と本番 DB の同期の作成に時間を費やすのではなく、代わりに標準ツールを使用することをお勧めします。たとえば、Visual Studio Team Edition 2008 (またはデータベース エディション) または Visual Studio 2010 Ultimate エディションの機能を使用して、2 つのデータベースのデータを比較します。それは非常にうまく機能します。

于 2010-06-10T09:08:38.380 に答える
4

RedGateのSQL Data Compare (無料ではありません) があり、SMO組み込み機能もあります。

最後に、ウィキペディアにはソフトウェアの完全なリストがあります。

于 2010-06-10T07:51:17.540 に答える
3

これは 1 回限りであるため、このクエリを使用して、この 2 つのテーブルで異なる行を見つけることができます。

(SELECT * FROM TABLE_A
 MINUS
 SELECT * FROM TABLE_B)

 UNION ALL

(SELECT * FROM TABLE_B
 MINUS
 SELECT * FROM TABLE_A)

MINUSフィールドごとにレコードを比較し、2 番目のテーブルに同一のレコードがある最初のテーブルのレコードを破棄します。これは次のように機能します。

  • 最初に、存在しないMINUSすべてのレコードを取得しますTABLE_ATABLE_B
  • 2 番目に含まれていないMINUSすべてのレコードを取得します。TABLE_BTABLE_A
  • Union は、他のテーブルに一致するレコードがない両方のテーブルからすべてのレコードを取得します。

これらのレコードを一時テーブルに挿入してから、挿入/更新を行うことができます。

必要に応じて、比較するフィールド リストを制限できます。

これが機能するには主キーが必要であることに注意してください。

編集:
おっと。MINUSSQL Server は演算子をサポートしていません。私は昨年半年間 ORACLE を使用していたので、これは自動でした。

EXCEPT代わりに演算子を使用できます。この記事を参照してください: EXCEPT と INTERSECT (Transact-SQL)

編集2:

Re scherand のコメント:
ローカル マシンから実際にライブ サーバーに接続できない場合は、単純にダンプTABLE_Aしてサーバーにロードできます。いずれにせよ、目標はライブサーバーのテーブルデータを変更することです。

于 2010-06-10T10:00:50.017 に答える
3

I ran in the same problem as you - searched for a free tool that compares data from two MS SQL tables - and found nothing. Then I created a simple freeware command line utility. It compares data from two tables, and creates INSERT/DELETE/UPDATE statemenets to make destination table data the same as source. Now I am using it for data comparison, and as it is completely free, can recommend to check it out at: Sourceforge.net - UltraDBC

于 2012-11-01T15:12:08.117 に答える
2

挿入用のスクリプトを作成するデータ スクリプト ジェネレーターを使用してから、WinMerge などのファイル比較ツールを使用してファイルを比較し、違いを見つけることができます。コード プロジェクトでのデータ スクリプトの生成に関する記事があります: http://www.codeproject.com/KB/database/sqlinsertupdategenerator.aspx

于 2010-06-10T07:53:51.300 に答える
1

Tablediff が機能します。これは無料で、SQL Server に付属しています http://msdn.microsoft.com/en-us/library/ms162843.aspx

于 2011-10-04T13:23:00.750 に答える
0

xSQL Data Compareもご覧ください。SQL Express バージョンは無料で、小規模なデータベース向けの機能を備えた Lite バージョンもあります。

SSDTからのデータ比較も優れた無料ツールです。

免責事項: 私は xSQL と提携しています。

于 2016-10-20T07:43:45.950 に答える
0

SQL Serverのスキーマ比較をお試しください

このツールは無料ではありません (シェアウェアです) が、30 日間の試用版を無料で使用できます。また、この製品の無料ライセンスを取得する機会もあります -無料ライセンス条件ページを参照してください。

于 2010-09-23T11:48:15.650 に答える
0

また、SQL Server 2008 が提供するを使用することもでき import and export dataます。これは、すべてのデータをどこからでもどこにでもコピーするための非常に簡単な方法です。私は同じことをし、完璧に動作します。

于 2010-06-10T08:32:47.723 に答える