次の方法で共有


チュートリアル: 別のデータベースを参照するデータベースを作成して配置する

このチュートリアルでは、別のデータベースを参照するデータベースのデータベース プロジェクトを作成します。 プロジェクトが参照するデータベースは、Visual Studio Premium を使用して管理することもできますが、別のソリューションになります。 この方法では、各開発者が異なるデータベースを管理する場合、または開発者が参照先のデータベースを配置できない場合の一般的なシナリオをエミュレートします。

このチュートリアルでは、次の作業について説明します。

  • データベース プロジェクトを作成する方法

  • 別のデータベース プロジェクトによって作成された .dbschema ファイルを参照する方法

  • 参照するデータベース プロジェクトの変数とその値を定義する方法

  • データベース プロジェクトを分離開発環境に配置する方法

必須コンポーネント

Visual Studio をインストールしておく必要があります。 「チュートリアル : バージョン管理されたデータベースの新規作成と配置」を完了し、作成したデータベースを分離開発環境に配置しておくことも必要です。 プロジェクトをバージョン管理に追加するには、Visual Studio Team Foundation Server などのバージョン管理ソフトウェアがインストールされている必要があります。

データベース プロジェクトを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

    [新しいプロジェクト] ダイアログ ボックスが表示されます。

  2. [インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] をクリックします。

    注意

    Visual Studio Professional を使用している場合は、代わりに [インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードを展開します。次に、[詳細設定] をクリックします。

  3. テンプレートの一覧の [SQL Server 2008 データベース プロジェクト] をクリックします。

  4. [名前] ボックスに「OrdersDB」と入力します。

  5. [ソリューションのディレクトリを作成] チェック ボックスをオンにします。

  6. [場所] ボックス、[ソリューション名] ボックス、および [ソース管理に追加] ボックスの既定値をそのまま使用し、[OK] をクリックします。

    注意

    この時点で、ソリューションをバージョン管理に追加できます。 このチュートリアルでは、最後の手順でソリューションをバージョン管理に追加します。

    ソリューション エクスプローラーに、新しいデータベース プロジェクト ProductsDB が表示されます。

  7. [表示] メニューの [スキーマ ビュー] をクリックします。

    スキーマ ビューがまだ表示されていない場合は、表示されます。

    次に、テーブルをデータベース プロジェクトに追加します。

OrderItems テーブルをデータベース プロジェクトに追加するには

  1. スキーマ ビューで [OrdersDB] プロジェクトを右クリックし、[追加] をポイントし、[テーブル] をクリックします。

    [新しい項目の追加] ダイアログ ボックスが表示されます。

  2. [テンプレート][テーブル] をクリックします。

    注意

    [カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートをより簡単に検索できます。

  3. [名前] ボックスに、新しいテーブルの名前として「OrderItems」と入力します。

  4. [追加] をクリックして、テーブルをデータベース プロジェクトに追加します。

    ソリューション エクスプローラーに、データベース プロジェクトの新しいテーブルのファイルが表示されます。 スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいテーブルの定義が表示されます。

  5. Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。

    -- =============================================
    -- Create OrderItems table
    -- =============================================
    CREATE TABLE [dbo].[OrderItems]
    (
    [POID] INT NOT NULL,
    [ItemID] INT NOT NULL,
    [ProductID] INT NOT NULL,
    [Quantity] INT NOT NULL,
    [Price] FLOAT NOT NULL,
    [Notes] NVARCHAR(75) NULL
    ) ON [PRIMARY]
    
  6. [ファイル] メニューの [dbo.OrderItems.table.sql の保存] をクリックします。

  7. スキーマ ビューで、[dbo.OrderItems] ノードを展開します。

  8. dbo.OrderItems テーブルの [列] ノードを展開します。

    Transact-SQL エディターで定義した列が表示されます。

    次に、OrderItems テーブルに主キーを追加します。

OrderItems テーブルに主キーを追加するには

  1. スキーマ ビューで、[dbo.OrderItems] を右クリックし、[追加] をポイントします。次に、[主キー] をクリックします。

    [新しい項目の追加] ダイアログ ボックスが表示されます。

  2. [名前] ボックスに、新しい主キーの名前として「PK_OrderItems」と入力します。

  3. [追加] をクリックして、主キーを追加します。

    ソリューション エクスプローラーに、データベース プロジェクトの新しい主キーのファイルが表示されます。 スキーマ ビューに新しい主キー オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいキーの定義が表示されます。

    注意

    主キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。

  4. Transact-SQL エディターで、次の例に示すように主キーの定義を変更します。

    -- =============================================
    -- Create PK_OrderItems primary key 
    -- =============================================
    ALTER TABLE [dbo].[OrderItems] 
    ADD CONSTRAINT [PK_OrderItems] 
    PRIMARY KEY CLUSTERED  ([POID], [ItemID]) 
    ON [PRIMARY]
    
  5. [ファイル] メニューの [dbo.OrderItems.PK_OrderItems.pkey.sql の保存] をクリックします。

    主キー定義が有効になり、アイコンのエラー インジケーターが消えます。

    次に、データベース間参照を追加します。

別のデータベースのテーブルを参照するビューを追加するには

  1. スキーマ ビュー[ビュー] ノードを右クリックし、[追加] をポイントして、[ビュー] をクリックします。

  2. [名前] ボックスに、新しいビューに付ける名前として「ItemDetailsView」と入力し、[追加] をクリックします。

    ソリューション エクスプローラーに、データベース プロジェクトの新しいビューのファイルが表示されます。 スキーマ ビューに新しいビュー オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいビューの定義が表示されます。

    注意

    スキーマ ビューでビューのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "[sometableorview]" テーブルまたはビューが存在しないために発生します。

  3. Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。

    -- =============================================
    -- Create ItemDetailsView view
    -- =============================================
    CREATE VIEW [dbo].[ItemDetailsView]
    AS 
    SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], 
           O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O
     INNER JOIN [ProductsDB].[dbo].[Products] AS P
            ON P.[ProductID] = O.[ProductID]
    
  4. [ファイル] メニューの [dbo.ItemDetailsView.view.sql の保存] をクリックします。

  5. [表示] メニューの [エラー一覧] をクリックします。

    [エラー一覧] に 6 つのエラーが表示されます。 エラーが発生するのは、Visual Studio Premium は、ユーザーがデータベース プロジェクトを配置するときに参照するデータベースがターゲット サーバーに存在するかどうかを確認できないためです。 ユーザーは別のターゲットの場所に配置できるため、このエラーには注意が必要です。 このエラーを解決するには、次回データベース間参照を定義する必要があります。

データベース間参照を定義するには

  1. ソリューション エクスプローラーで、[OrderItems] プロジェクトを展開し、[参照] ノードをクリックします。

  2. [プロジェクト] メニューの [データベース参照の追加] をクリックします。

    注意

    [参照] ノードを右クリックし、[データベース参照の追加] をクリックすることもできます。

    [データベース参照の追加] ダイアログ ボックスが表示されます。 ソリューションに含まれるデータベース プロジェクトは 1 つのみであるため、[データベース プロジェクト スキーマ (.dbschema)] が既定で指定されます。

  3. [参照] をクリックします。

    [データベース ファイルの選択] ダイアログ ボックスが表示されます。

  4. 必要条件のチュートリアルでプロジェクトをビルドしたときに作成された ProductsDB.dbschema ファイル (My Documents\Visual Studio 2008\Projects\ProductsDB\ProductsDB\sql\ProductsDB.dbschema など) を指定し、[開く] をクリックします。

  5. [データベース参照変数] で、[データベース変数を定義する] チェック ボックスをオンにします。 [名前] ボックスに「ReferencedDBVar」と入力します。 [値] ボックスに「ProductsDB」と入力します。

    注意

    このチュートリアルでは、参照するデータベースは、参照を追加するデータベースと同じサーバー上に常に存在すると仮定できます。 したがって、サーバー名の変数を定義する必要はありません。

  6. [スキーマ オブジェクトとスクリプトの更新] で、[データベース参照変数を使用する既存のスキーマ オブジェクト定義とスクリプトを更新する] チェック ボックスをオンにし、[OK] をクリックします。

  7. [変更のプレビュー] ダイアログ ボックスで、[内部結合] をクリックして変更の詳細を表示し、[適用] をクリックします。

    ビューの定義が次のように更新されます。

    -- =============================================
    -- Create ItemDetailsView view
    -- =============================================
    CREATE VIEW [dbo].[ItemDetailsView]
    AS 
    SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], 
           O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O
     INNER JOIN [$(ReferencedDBVar)].[dbo].[Products] AS P
            ON P.[ProductID] = O.[ProductID]
    

    指定した変数名は参照先のテーブル名を示し、6 つのエラーが解決されました。 次に、データベース プロジェクトをビルドして配置します。

プロジェクトを構成、ビルド、および配置するには

  1. ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。

  2. [プロジェクト] メニューの [OrdersDB のプロパティ] をクリックします。

    プロジェクトのプロパティ ウィンドウが表示されます。

    注意

    ソリューション エクスプローラーで OrdersDB プロジェクトを右クリックし、[プロパティ] をクリックする方法もあります。

  3. [配置] タブをクリックします。

  4. [配置動作] ボックスの一覧の、[配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。

  5. [編集] をクリックし、ターゲット接続を指定します。

  6. OrdersDB データベースを配置するデータベース サーバーへの接続情報を指定します。

    重要

    このチュートリアルを実行するには、必要条件のチュートリアルで ProductsDB を配置したのと同じサーバーにデータベースを配置する必要があります。 別のサーバーに配置する場合、そのサーバーの変数を定義する必要があります。

  7. [データベース名の選択または入力] ボックスに、「OrdersDB」と入力し、[OK] をクリックします。

    [ターゲット接続] ボックスに接続文字列が表示され、[ターゲット データベース名] ボックスに "OrdersDB" と表示されます。

  8. その他のオプションについては既定値をそのまま使用し、[ファイル] メニューを開き、[選択されたファイルを上書き保存] をクリックします。

    プロジェクトの配置設定が保存されます。

  9. [ビルド] メニューの [ソリューションのビルド] をクリックします。

    データベース プロジェクトがビルドされます。 ビルドが成功した場合は、ステータス バーに "ビルドに成功しました。" と表示され、[出力] ウィンドウにビルド結果が表示されます。

  10. ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。

  11. [ビルド] メニューの [OrdersDB の配置] をポイントします。

    ビルド構成に指定した接続を使って、データベース プロジェクトが配置されます。 "配置に成功しました。" というメッセージが [出力] ウィンドウとステータス バーに表示されます。

次の手順

これで、データベース プロジェクトをバージョン管理し、チームと共有できるようになります。

参照

概念

データベース プロジェクトの構成とテスト配置の実行

データベース コードの記述と変更

データベースのビルドとステージング環境または稼動環境への配置