次の方法で共有


チュートリアル: 2 つのデータベースのデータの比較

このトピックの内容は、次の製品に該当します。

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

トピック該当 トピック該当 トピック該当なし トピック該当なし

このチュートリアルでは、2 つのデータベースのデータを比較し、相違点に基づいてデータ操作言語 (DML: Data Manipulation Language) スクリプトを生成し、このスクリプトを使ってソースのデータをターゲットに書き込みます。

このチュートリアルでは、次の手順を行います。

  • ソース データベースへのバインド。 この手順では、Transact-SQL エディターを使用して、ソース データベースの Customer テーブルにデータを追加します。

  • 2 つのデータベースのデータの比較。 この手順では、データの相違点を検出してグリッドに表示し、相違点を表す DML スクリプトを生成します。

  • ターゲット データベースの更新。 この手順では、ソースに一致するようにターゲットを更新する際に使用できる 2 つの方法を紹介します。

必須コンポーネント

このチュートリアルを実行するには、次の製品にアクセス権を持っている必要があります。

  • SQL Server 2008

  • Visual Studio Premium または Visual Studio Ultimate

このチュートリアルを開始する前に、「チュートリアル : 2 つのデータベースのスキーマを比較する」の各手順を実行してください。 このチュートリアルを実行すると、次の 2 つのデータベースが用意されます。

  • ソースである CompareProjectDB は元の構造と同じですが、データは格納されていません。 プロジェクトをカスタマイズし、配置後スクリプトの一部としてデータをデータベースに挿入します。

  • ターゲットである EmptyDB は、スキーマを比較するためにチュートリアルで作成しました。 AdventureWorks データベースのスキーマのみを EmptyDB に適用しました。 そのため、EmptyDB にはデータは格納されていません。

ソース データベースとターゲット データベースのデータを読み取るアクセス許可が必要です。

ソース データベースへのデータの追加

Transact-SQL エディターを使用してデータをソース データベースに追加するには

  1. [データ] メニューの [Transact-SQL エディター] をポイントし、[新しいクエリ接続] をクリックします。

  2. CompareProjectDB が格納されているサーバーへの接続を指定します。

  3. Transact-SQL エディターで、次の Transact-SQL ステートメントを入力します。

    use CompareProjectDB;
    go
    delete from [Sales].[Customer];
    go
    exec [Sales].[uspNewCustomer] 'Ken J. Sánchez'
    exec [Sales].[uspNewCustomer] 'Terri Lee Duffy'
    exec [Sales].[uspNewCustomer] 'Roberto Tamburello'
    exec [Sales].[uspNewCustomer] 'Rob Walters'
    exec [Sales].[uspNewCustomer] 'Gail Erickson'
    exec [Sales].[uspNewCustomer] 'Jossef Goldberg'
    exec [Sales].[uspNewCustomer] 'Dylan Miller'
    exec [Sales].[uspNewCustomer] 'Diane Margheim'
    exec [Sales].[uspNewCustomer] 'Gigi Matthew'
    go
    
  4. Transact-SQL エディターのツール バーで、[SQL の実行] をクリックします。

    Transact-SQL ステートメントでは [Sales].[Customer] テーブルの既存のデータを削除し、[Sales].[uspNewCustomer] ストアド プロシージャを使用して 9 人のユーザーを追加します。 ソース データベースにデータが含まれるため、ターゲット データベースと比較できます。

2 つのデータベースのデータの比較

2 つのデータベースのデータを比較するには

  1. [データ] メニューの [データ比較] をポイントし、[新しいデータの比較] をクリックします。

    新しいデータの比較ウィザードが表示されます。 また、[データ比較] ウィンドウがバックグラウンドで開き、DataCompare1 などの名前が Visual Studio によって自動的に割り当てられます。

  2. [ソース データベース] 一覧の CompareProjectDB データベースへの接続をクリックします。

    [ソース データベース] ボックスの一覧が空の場合、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスで、CompareProjectDB データベースがあるサーバー、およびデータベースに接続するときに使用する認証の種類を指定します。 [OK] をクリックして [接続のプロパティ] ダイアログ ボックスを閉じ、新しいデータの比較ウィザードに戻ります。

  3. [ターゲット データベース] 一覧の Server.EmptyDB.dbo をクリックします。

    [ターゲット データベース] ボックスの一覧が空の場合、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスで、EmptyDB データベースが常駐するサーバーの名前、およびこのデータベースに接続するときに使用する認証の種類を指定します。 [OK] をクリックして [接続のプロパティ] ダイアログ ボックスを閉じ、新しいデータの比較ウィザードに戻ります。

    比較結果に表示するレコードを制限する必要がある場合は、データ比較オプションを指定します。 このチュートリアルでは、既定値を使用してすべてのレコードを表示します。

  4. [次へ] をクリックします。

    新しいデータの比較ウィザードの 2 ページ目では、比較するテーブルおよびビューの選択内容を詳細に指定できます。 [テーブル] ノードの下にデータベース内のすべてのテーブルが一覧表示されます。 各テーブルを展開すると、そのテーブルに含まれている列が表示されます。 既定で、すべてのテーブルと列が表示され、比較されます。 レコードの比較に使用されるキーは、テーブルごとに表示されるか、一覧形式で表示されます。 テーブルとビューは、一定の比較基準を満たす必要があります。 詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。

    注意

    比較するテーブルとビューをカスタマイズしない場合は、[次へ] ではなく [完了] をクリックします。

  5. [完了] をクリックして比較を開始します。

    比較が開始されます。

    注意

    進行中のデータ比較を停止するには、[データ比較] ツール バーの [停止] をクリックします。

    比較が終わると、2 つのデータベース間のデータの相違点が [データ比較] ウィンドウの表に表示されます。 比較結果を表示する方法の詳細については、次の手順を参照してください。

    必要に応じて、ソースのデータと一致するようにターゲットのデータを更新できます。 詳細については、「ターゲット データベースの更新」を参照してください。

データの比較結果を表示するには

  1. [Sales].[Customer] 行をクリックします。

    レコード ビュー ペインのタブの名前が、それぞれの種類のレコード件数を反映する名前 ([異なるレコード (0)][ソースのみ (9)][ターゲットのみ (0)]、および [同一のレコード (0)]) に変わります。

  2. [ソースのみ (9)] タブをクリックします。

    [ソースのみ (9)] タブのそれぞれの行と列は、[Sales].[Customer] テーブルの行と列に対応しています。

    注意

    このタブを使用すると、ターゲットに反映するデータを制御できます。

ターゲットの更新

[データ比較] ウィンドウからターゲットのデータを直接更新する方法と、Transact-SQL エディターを使用する方法があります。 このセクションでは、この 2 つの方法について説明します。

2 つのデータを比較すると、[データ比較] ウィンドウのグリッドに相違点が表示されます。 [オブジェクト] 列の各テーブルまたはビューに対応するチェック ボックスは、そのオブジェクトが更新操作に含まれるかどうかを示します。 各列には、データ比較で示された変更の種類が表示されます。 この例の場合、ターゲットには既定のオブジェクトしか格納されていないので、適用される変更は [ソースのみ] 列のみに表示されます。

データ比較オプションによる変更の書き込み

[データ比較] ウィンドウに表示された更新アクションを使ってターゲットのデータを更新するには、次の手順を実行します。

  • ターゲット データベースの更新

Transact-SQL エディターによる更新の書き込み

更新スクリプトをエクスポートして確認し、変更した後で、これを使ってターゲットを変更するには、次の手順を実行します。

  • 同期スクリプトの確認と実行

ターゲット データベースの更新

ターゲットを更新するには

  1. [データ比較] ウィンドウで、[Sales].[Customer] をクリックします。

  2. 詳細ペインで [ソースのみ] をクリックします。

    先頭の 2 行は、Ken J. Sánchez と Terri Lee Duffy というユーザーに関する情報です。

    詳細ペインのステータス バーに、ソースに不足しているレコードの数、およびターゲットから削除されるレコードの数が表示されます。 この 2 つの数は一致します。

  3. Terri Lee Duffy の行のチェック ボックスをオフにします。

    詳細ペインのステータス バーで、挿入されるレコードの数が 1 つ減ります。 ターゲットに不足しているレコードの数とは一致しなくなりました。

  4. [データ比較] ウィンドウで [更新の書き込み] をクリックします。

    [データ比較] ウィンドウに示された更新アクションが実施されます。 この同期により、ソースに一致するようにターゲットが変更されます。

    注意

    ターゲットを更新している途中で [ターゲットへの書き込みの停止] をクリックすると、操作をキャンセルできます。

同期スクリプトの確認と実行

同期スクリプトを確認するには

  1. [データ比較] のツール バーで、[エディターにエクスポート] をクリックします。

    Transact-SQL エディターが接続モードで開き、Transact-SQL スクリプトが表示されます。 このウィンドウには、DataUpdate_EmptyDB_1.sql などの名前が付いています。 書き込みアクセス権が付与されているので、このウィンドウでスクリプトを変更できます。 更新スクリプトを保存する場合、[保存] をクリックします。

  2. 2 つのデータベースのデータを同期するために、このスクリプトを実行します。スクリプトを実行するには、[SQL の実行] をクリックするか、F5 キーを押します。

    注意

    スクリプトを実行している途中で [クエリ実行のキャンセル] をクリックするか、Alt キーを押しながら Break キーを押すと、操作を取り消すことができます。

参照

処理手順

方法: データベース スキーマを比較する

方法: 2 つのデータベースのデータを比較して同期させる

概念

データベース スキーマの比較と同期