次の方法で共有


方法:2 つのデータベースのデータを比較および同期する

2 つのデータベースに含まれるデータを比較できます。 比較するデータベースは、ソースターゲットと呼ばれます。

注意

データベース プロジェクトおよび .dacpac パッケージまたは .bacpac パッケージは、データ比較のソースまたはターゲットに指定できません。

データを比較すると、データ操作言語 (DML) スクリプトが生成されます。このスクリプトを使用すると、ターゲット データベースの一部またはすべてのデータを更新して、内容が異なるデータベースを同期することができます。 データの比較が終了すると、Visual Studio の [データ比較] ウィンドウにその結果が表示されます。

比較が完了したら、次のように他の手順を実行できます。

詳しくは、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」をご覧ください。

注意

2 つのデータベース、または同一データベースの 2 つのバージョンのスキーマも比較できます。 詳細については、「スキーマ比較を使用して各種のデータベース定義を比較する方法」を参照してください。

データベースのデータを比較する

新しいデータ比較ウィザードを使用してデータを比較する

  1. メイン メニューから、[ツール]>[SQL Server]>[新規データ比較] に移動します。

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

  2. ソース データベースとターゲット データベースを識別します。

    [ソース データベース] の一覧または [ターゲット データベース] の一覧が空の場合は、[新しい接続] を選びます。 [接続のプロパティ] ダイアログ ボックスで、データベースが存在するサーバー、およびデータベースへの接続時に使用する認証の種類を指定します。 次に、[OK] を選んで [接続のプロパティ] ダイアログ ボックスを閉じ、データの比較ウィザードに戻ります。

    データの比較ウィザードの最初のページで、各データベースの情報が正しいことを確認し、結果に含めるレコードを指定して、[次へ] を選びます。 データの比較ウィザードの 2 ページ目が表示され、データベース内のテーブルとビューが階層形式で表示されます。

  3. 比較するテーブルおよびビューのチェック ボックスをオンにします。 必要に応じて、データベース オブジェクトのノードを展開し、そのオブジェクト内で比較する列のチェック ボックスをオンにします。

    Note

    テーブルとビューが一覧に表示されるようにするには、2 つの条件を満たす必要があります。 まず、ソース データベースとターゲット データベース間でオブジェクトのスキーマが一致する必要があります。 次に、主キー、一意なキー、一意なインデックス、または一意な制約を持つテーブルとビューのみが一覧に表示されます。 両方の条件を満たすテーブルまたはビューが存在しない場合、一覧は空になります。

  4. 複数のキーが存在する場合は、[比較キー] 列を使用し、データ比較の基になるキーを指定することができます。 たとえば、主キー列と (一意に識別できる) 他のキー列のどちらを比較の基準にするかを指定できます。

  5. [完了] を選択します。

    比較が開始されます。

    Note

    実行中のデータの比較操作を停止するには、[SQL] メニューを開き、[データ比較] を選んでから、[データ比較の停止] を選びます。

    比較が完了したら、2 つのデータベース間のデータの差異を表示できます。 ターゲット データベースのデータの一部またはすべては、ソース データベースのデータと一致するよう更新することもできます。

Visual Studio のオートメーション モデルを使用してデータを比較する

  1. [表示] メニューを開き、[その他のウィンドウ] をポイントして、[コマンド ウィンドウ] を選びます。

  2. コマンド ウィンドウで、次のコマンドを入力します。

    Tools.NewDataComparison /SrcServerName sServerName /SrcDatabaseName sDatabaseName /SrcUserName sUserName /SrcPassword sPassword /SrcDisplayName sDisplayName /TargetServerName tServerName /TargetDatabaseName tDatabaseName /TargeUserName tUserName /TargetPassword tPassword /TargetDisplayName tDisplayName
    

    プレースホルダー (sServerNamesDatabaseNamesUserNamesPasswordsDisplayNametServerNametDatabaseNametUserNametPasswordtDisplayName) をソース データベースとターゲット データベースの値に置き換えます。

    ソースとターゲットを指定しないと、[新規データ比較] ダイアログ ボックスが表示されます。 Tools.NewDataComparison コマンドのパラメーターの詳細については、Visual Studio Team System のデータベース機能のオートメーション コマンド リファレンスに関するページをご覧ください。

    指定したソース データベースとターゲット データベースのデータが比較されます。 結果が [データ比較] セッションに表示されます。 結果の表示方法またはデータの同期方法について詳しくは、「データの差異の表示」および「データベース データの同期」をご覧ください。

データの差異を表示する

2 つのデータベースのデータを比較すると、[データ比較] ボックスには、比較した各データベース オブジェクトとその状態が一覧表示されます。 各オブジェクト内のレコードの結果を状態別にグループ化して表示することもできます。 状態の指定について詳しくは、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」をご覧ください。

差異を表示した後、異なる、欠落している、または新しいオブジェクトまたはレコードの一部またはすべてについて、ソースと一致するようにターゲットを更新できます。 詳しくは、「データベース データの同期」をご覧ください。

データの差異を表示する

  1. ソース データベースとターゲット データベースのデータを比較します。 詳しくは、「データベース データの比較」をご覧ください。

  2. (省略可能) 次のいずれかまたは両方の操作を行います。

    • 既定では、状態に関係なく、すべてのオブジェクトの結果が表示されます。 特定の状態のオブジェクトのみを表示するには、[フィルター] ボックスの一覧でオプションを選びます。

    • 特定のオブジェクト内のレコードの結果を表示するには、メインの結果ペインでオブジェクトを選んでから、レコード ビュー ペインでタブを選びます。 各タブには、そのオブジェクト内で特定の状態 (不一致、ソースのみに存在、ターゲットのみに存在、または一致) にあるすべてのレコードが表示されます。 データは、レコードおよび列ごとに表示されます。

データベースのデータを同期する

2 つのデータベースのデータを比較した後、ソースと一致するようにターゲットの全体または一部を更新して、2 つのデータベースを同期できます。 テーブルとビューという 2 種類のデータベース オブジェクトのデータを比較できます。

更新の書き込みコマンドを使用してターゲット データを更新する

  1. ソース データベースとターゲット データベースのデータを比較します。 詳しくは、「データベース データの比較」をご覧ください。

    比較が終了すると、比較したオブジェクトの結果が [データ比較] ウィンドウに表示されます。 4 つの列 ([異なるレコード]、[ソース内のみ]、[ターゲット側]、[一致するレコード]) には、一致しないオブジェクトに関する情報が表示されます。 これらの列には、このような各オブジェクトについて、異なると検出されたレコードの件数、および更新操作によって変更されるレコードの件数が表示されます。 この 2 つの数値は最初一致しますが、手順 4. で、更新するオブジェクトを変更できます。

    詳しくは、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」をご覧ください。

  2. [データ比較] ウィンドウのテーブルで、行を選びます。

    詳細ペインに、選んだデータベース オブジェクトのレコードに関する結果が表示されます。 レコードは状態別にタブでグループ化されており、このタブを使用して、ソースからターゲットに反映させるデータを指定できます。

  3. 詳細ペインで、ゼロ (0) 以外の数字が名前に含まれるタブを選びます。

    [ターゲット内のみ] テーブルの [更新] 列のチェック ボックスを使用して、更新する行を選択できます。 既定では、各チェック ボックスがオンになっています。

  4. ターゲットのレコードのうち、ソースのデータで更新しないレコードのチェック ボックスをオフにします。

    チェック ボックスをオフにすると、更新するレコードの数が減るため、この操作を反映するよう表示が変更されます。 この数は、詳細ペインのステータス行、および手順 1. で説明したようにメインの結果ペインの対応する列に表示されます。

  5. (省略可能) [スクリプトの生成] を選びます。

    Transact-SQL エディター ウィンドウが開き、ターゲットの更新に使用するデータ操作言語 (DML) スクリプトが表示されます。

  6. 異なるレコード、欠落しているレコード、または新しいレコードを同期するには、[ターゲットの更新] を選びます。

    注意

    ターゲット データベースの更新中に [ターゲットへの書き込みの停止] を選ぶと、操作を取り消すことができます。

    ターゲットで選択されたレコードのデータが、ソース内の対応するレコードのデータで更新されます。

    Note

    インデックス付きビューを更新するときに、同一テーブルに重複するキーが挿入される場合は [ターゲットの更新] 操作が失敗することがあります。

Transact-SQL スクリプトを使用してターゲット データを更新する

  1. ソース データベースとターゲット データベースのデータを比較します。 詳しくは、「データベース データの比較」をご覧ください。

    比較が終了すると、比較したオブジェクトが [データ比較] ウィンドウに表示されます。 詳しくは、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」をご覧ください。

  2. (省略可能) 前の手順で説明したように、詳細ペインで、更新しないターゲットのレコードのチェック ボックスをオフにします。

  3. [スクリプトの生成] を選びます。

    ターゲットのデータをソースのデータに一致させるために必要な変更を反映する Transact-SQL スクリプトが新しいウィンドウに表示されます。 新しいウィンドウには、DataUpdate_Database_1.sql のような名前が付いています。

    このスクリプトは、詳細ペインで行った変更を反映しています。 たとえば、[ターゲット内のみ] ページで [dbo].[Shippers] テーブルの特定の行のチェック ボックスをオフにしたとします。 その場合、スクリプトはその行を更新しません。

  4. (省略可能) [DataUpdate_Database_1.sql] ウィンドウでこのスクリプトを編集します。

  5. (省略可能、ただし推奨) ターゲット データベースをバックアップします。

  6. [実行] を選んで、ターゲット データベースを更新します。

    更新するターゲット データベースへの接続を指定します。

    重要

    既定では、更新はトランザクションのスコープ内で実行されます。 エラーが発生した場合は、更新全体をロールバックできます。 この動作は変更できます。

    ターゲットで選択されたレコードのデータが、ソース内の対応するレコードのデータで更新されます。

次のステップ