このトピックの内容は、次の製品に該当します。
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 エディターを使用してデータをソース データベースに追加するには
[データ] メニューの [Transact-SQL エディター] をポイントし、[新しいクエリ接続] をクリックします。
CompareProjectDB が格納されているサーバーへの接続を指定します。
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
Transact-SQL エディターのツール バーで、[SQL の実行] をクリックします。
Transact-SQL ステートメントでは [Sales].[Customer] テーブルの既存のデータを削除し、[Sales].[uspNewCustomer] ストアド プロシージャを使用して 9 人のユーザーを追加します。 ソース データベースにデータが含まれるため、ターゲット データベースと比較できます。
2 つのデータベースのデータの比較
2 つのデータベースのデータを比較するには
[データ] メニューの [データ比較] をポイントし、[新しいデータの比較] をクリックします。
新しいデータの比較ウィザードが表示されます。 また、[データ比較] ウィンドウがバックグラウンドで開き、DataCompare1 などの名前が Visual Studio によって自動的に割り当てられます。
[ソース データベース] 一覧の CompareProjectDB データベースへの接続をクリックします。
[ソース データベース] ボックスの一覧が空の場合、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスで、CompareProjectDB データベースがあるサーバー、およびデータベースに接続するときに使用する認証の種類を指定します。 [OK] をクリックして [接続のプロパティ] ダイアログ ボックスを閉じ、新しいデータの比較ウィザードに戻ります。
[ターゲット データベース] 一覧の Server.EmptyDB.dbo をクリックします。
[ターゲット データベース] ボックスの一覧が空の場合、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスで、EmptyDB データベースが常駐するサーバーの名前、およびこのデータベースに接続するときに使用する認証の種類を指定します。 [OK] をクリックして [接続のプロパティ] ダイアログ ボックスを閉じ、新しいデータの比較ウィザードに戻ります。
比較結果に表示するレコードを制限する必要がある場合は、データ比較オプションを指定します。 このチュートリアルでは、既定値を使用してすべてのレコードを表示します。
[次へ] をクリックします。
新しいデータの比較ウィザードの 2 ページ目では、比較するテーブルおよびビューの選択内容を詳細に指定できます。 [テーブル] ノードの下にデータベース内のすべてのテーブルが一覧表示されます。 各テーブルを展開すると、そのテーブルに含まれている列が表示されます。 既定で、すべてのテーブルと列が表示され、比較されます。 レコードの比較に使用されるキーは、テーブルごとに表示されるか、一覧形式で表示されます。 テーブルとビューは、一定の比較基準を満たす必要があります。 詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。
注意
比較するテーブルとビューをカスタマイズしない場合は、[次へ] ではなく [完了] をクリックします。
[完了] をクリックして比較を開始します。
比較が開始されます。
注意
進行中のデータ比較を停止するには、[データ比較] ツール バーの [停止] をクリックします。
比較が終わると、2 つのデータベース間のデータの相違点が [データ比較] ウィンドウの表に表示されます。 比較結果を表示する方法の詳細については、次の手順を参照してください。
必要に応じて、ソースのデータと一致するようにターゲットのデータを更新できます。 詳細については、「ターゲット データベースの更新」を参照してください。
データの比較結果を表示するには
[Sales].[Customer] 行をクリックします。
レコード ビュー ペインのタブの名前が、それぞれの種類のレコード件数を反映する名前 ([異なるレコード (0)]、[ソースのみ (9)]、[ターゲットのみ (0)]、および [同一のレコード (0)]) に変わります。
[ソースのみ (9)] タブをクリックします。
[ソースのみ (9)] タブのそれぞれの行と列は、[Sales].[Customer] テーブルの行と列に対応しています。
注意
このタブを使用すると、ターゲットに反映するデータを制御できます。
ターゲットの更新
[データ比較] ウィンドウからターゲットのデータを直接更新する方法と、Transact-SQL エディターを使用する方法があります。 このセクションでは、この 2 つの方法について説明します。
2 つのデータを比較すると、[データ比較] ウィンドウのグリッドに相違点が表示されます。 [オブジェクト] 列の各テーブルまたはビューに対応するチェック ボックスは、そのオブジェクトが更新操作に含まれるかどうかを示します。 各列には、データ比較で示された変更の種類が表示されます。 この例の場合、ターゲットには既定のオブジェクトしか格納されていないので、適用される変更は [ソースのみ] 列のみに表示されます。
データ比較オプションによる変更の書き込み
[データ比較] ウィンドウに表示された更新アクションを使ってターゲットのデータを更新するには、次の手順を実行します。
- ターゲット データベースの更新
Transact-SQL エディターによる更新の書き込み
更新スクリプトをエクスポートして確認し、変更した後で、これを使ってターゲットを変更するには、次の手順を実行します。
- 同期スクリプトの確認と実行
ターゲット データベースの更新
ターゲットを更新するには
[データ比較] ウィンドウで、[Sales].[Customer] をクリックします。
詳細ペインで [ソースのみ] をクリックします。
先頭の 2 行は、Ken J. Sánchez と Terri Lee Duffy というユーザーに関する情報です。
詳細ペインのステータス バーに、ソースに不足しているレコードの数、およびターゲットから削除されるレコードの数が表示されます。 この 2 つの数は一致します。
Terri Lee Duffy の行のチェック ボックスをオフにします。
詳細ペインのステータス バーで、挿入されるレコードの数が 1 つ減ります。 ターゲットに不足しているレコードの数とは一致しなくなりました。
[データ比較] ウィンドウで [更新の書き込み] をクリックします。
[データ比較] ウィンドウに示された更新アクションが実施されます。 この同期により、ソースに一致するようにターゲットが変更されます。
注意
ターゲットを更新している途中で [ターゲットへの書き込みの停止] をクリックすると、操作をキャンセルできます。
同期スクリプトの確認と実行
同期スクリプトを確認するには
[データ比較] のツール バーで、[エディターにエクスポート] をクリックします。
Transact-SQL エディターが接続モードで開き、Transact-SQL スクリプトが表示されます。 このウィンドウには、DataUpdate_EmptyDB_1.sql などの名前が付いています。 書き込みアクセス権が付与されているので、このウィンドウでスクリプトを変更できます。 更新スクリプトを保存する場合、[保存] をクリックします。
2 つのデータベースのデータを同期するために、このスクリプトを実行します。スクリプトを実行するには、[SQL の実行] をクリックするか、F5 キーを押します。
注意
スクリプトを実行している途中で [クエリ実行のキャンセル] をクリックするか、Alt キーを押しながら Break キーを押すと、操作を取り消すことができます。