複数のデータベースが同じサーバー オブジェクトを参照する場合、各データベースのプロジェクト、および共有ログイン、キー、カスタム エラー メッセージなどのオブジェクトをインポートするサーバー プロジェクトを作成できます。 このチュートリアルでは、共有ログインを参照するデータベースの分離開発環境を設定し、その共有ログインをサーバー プロジェクトにインポートします。 この環境はデータベース プロジェクトに基づいています。データベース プロジェクトには、運用データベース内のすべてのオブジェクトの定義が格納されています。
このチュートリアルでは、次の作業について説明します。
共有サーバー プロジェクトの設定
複合データベース プロジェクトの作成
プロジェクトのチームでの利用 (省略可能)
必須コンポーネント
Visual Studio Premium がインストールされていて、サーバー オブジェクトのインポート元の SQL Server のコピーに対するアクセス権を持っている必要があります。 SQL Server のコピーが、データベース プロジェクトの配置先のサーバーで実行されている必要があります。
共有サーバー プロジェクトの設定
開発環境で共有ログインを参照する場合、そのログインは通常、既に存在しサーバー管理者が保守するサーバー プロジェクトで定義されます。
サーバー プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] をクリックします。
注意
Visual Studio Professional を使用している場合、[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードを展開します。次に、[詳細設定] をクリックします。
テンプレートの一覧の [SQL Server 2008 サーバー プロジェクト] をクリックします。
[プロジェクト名] ボックスに「SharedServerProject」と入力します。
[場所] および [ソリューション名] の値を変更する必要はありません。
[ソリューションのディレクトリを作成] チェック ボックスがまだオンになっていない場合はオンにします。
[ソース管理に追加] チェック ボックスがまだオフになっていない場合はオフにし、[OK] をクリックします。
空のサーバー プロジェクトがソリューションに追加され、ソリューション エクスプローラーに表示されます。
次に、サーバー オブジェクトと設定をインポートします。
サーバー オブジェクトと設定をインポートするには
ソリューション エクスプローラーで、[SharedServerProject] プロジェクトをクリックします。
[プロジェクト] メニューの [オブジェクトと設定のインポート] をクリックします。
注意
手順 1. と 2. の代わりに、[SharedServerProject] を右クリックし、[オブジェクトと設定のインポート] をクリックすることもできます。
データベースのインポート ウィザードで、オブジェクトと設定のインポート元にするサーバーへの接続を指定し、[開始] をクリックします。
重要
このチュートリアルでは、データベース プロジェクトの配置先と同じサーバーを指定する必要があります。
サーバーのオブジェクトと設定がプロジェクトにインポートされます。
オブジェクトと設定がインポートされたら、[完了] をクリックします。
[表示] メニューの [スキーマ ビュー] をクリックします。
[SharedServerProject] ノードを展開し、[サーバー レベル オブジェクト] ノードを展開します。次に、[セキュリティ] ノードを展開し、[ログイン] ノードを展開します。
このチュートリアルで後で使用するために表示されるログインを 1 つ確認し、メモしておきます。
次に、サーバー プロジェクトをビルドします。
サーバー プロジェクトをビルドするには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
ソリューションをビルドする場合、SharedServerProject.dbschema ファイルを作成します。このファイルには、サーバー プロジェクトのオブジェクトと設定の定義が含まれます。 このファイルはチュートリアルの後半で参照します。
次に、このサーバー プロジェクトで定義されているログインを使用するデータベース プロジェクトを作成します。
複合データベース プロジェクトの作成
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] をクリックします。
注意
Visual Studio Professional を使用している場合、[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードを展開します。次に、[詳細設定] をクリックします。
テンプレートの一覧の [SQL Server 2008 データベース プロジェクト] をクリックします。
[プロジェクト名] ボックスに「CompositeDBProject」と入力します。
[場所] および [ソリューション名] の値を変更する必要はありません。
[ソリューションのディレクトリを作成] チェック ボックスがまだオンになっていない場合はオンにします。
[ソース管理に追加] チェック ボックスがまだオフになっていない場合はオフにし、[OK] をクリックします。
空のデータベース プロジェクトがソリューションに追加され、ソリューション エクスプローラーに表示されます。
次に、このチュートリアルで以前に定義したサーバー プロジェクトからの出力への参照を追加します。
サーバー プロジェクトへの参照を追加するには
ソリューション エクスプローラーで、CompositeDBProject プロジェクトのノードを展開し、[参照設定] ノードをクリックします。
[プロジェクト] メニューの [データベース参照の追加] をクリックします。
注意
手順 1. と 2. の代わりに、[参照設定] ノードを右クリックし、[データベース参照の追加] をクリックすることもできます。
[データベース参照の追加] ダイアログ ボックスが表示されます。 ソリューションに含まれるデータベース プロジェクトは 1 つだけであるため、[データベース プロジェクト スキーマ (.dbschema)] が選択されます。
[参照] をクリックします。
[データベース ファイルの選択] ダイアログ ボックスが表示されます。
このチュートリアルで以前に作成した SharedServerProject.dbschema ファイルを指定します。
たとえば、次の場所を指定できます。
My Documents\Visual Studio 2010\Projects\SharedServerProject\SharedServerProject\sql\debug\SharedServerProject.dbschema
[開く] をクリックします。
サーバー プロジェクトから作成された dbschema ファイルへの参照を作成すると、既定では参照が "master" のリテラルを使用してそのオブジェクトを参照するように設定されます。 データベース変数の値を定義済みであるので、これは複合参照ではありません。 データベース変数は、異なるデータベースを表す場合のみ定義する必要があります。
[OK] をクリックします。
参照がサーバー プロジェクトに追加されます。 これで、サーバー プロジェクトで定義されているオブジェクトを、現在のデータベース プロジェクトで定義されているオブジェクトのように使用できます。
次に、データベース プロジェクトにユーザー オブジェクトを追加します。 ユーザー オブジェクトは、サーバー プロジェクトで定義されているログインを使用します。
データベース プロジェクトにユーザーを追加するには
[表示] メニューの [スキーマ ビュー] をクリックします。
[CompositeDBProject] ノードを展開し、[セキュリティ] ノードを展開します。次に、[ユーザー] ノードを右クリックし、[追加] をポイントして [ユーザー] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[名前] ボックスに「MyUser」と入力し、[追加] をクリックします。
ユーザーがデータベース プロジェクトに追加され、[スキーマ ビュー] に表示されます。 Transact-SQL エディターが開き、ユーザーの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにユーザーの定義を更新します。
CREATE USER [MyUser] FOR LOGIN [SharedLogin] WITH DEFAULT_SCHEMA = dbo;
重要
[SharedLogin] を、「サーバー オブジェクトと設定をインポートするには」の手順 7. で確認したログインに置き換える必要があります。
[ファイル] メニューの [MyUser.user.sql の保存] をクリックします。
次に、データベース ロールを定義します。
データベース ロールを定義するには
[スキーマ ビュー] で、[CompositeDBProject] ノードを展開し、[セキュリティ] ノードを展開し、[ロール] ノードを展開します。
[データベース ロール] ノードを右クリックし、[追加] をポイントします。次に、[データベース ロール] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[名前] ボックスに、「DbAccounting」と入力し、[追加] をクリックします。
ロールがデータベース プロジェクトに追加され、[スキーマ ビュー] に表示されます。 Transact-SQL エディターが開き、ロールの定義が表示されます。
[ファイル] メニューの [DbAccounting.role.sql の保存] をクリックします。
次に、データベース プロジェクトの配置プロパティを構成します。
ユーザーを新しいデータベース ロールに関連付けるには
[スクリプト] ノードを展開し、[配置後] ノードを展開し、[Script.PostDeployment.sql] をダブルクリックします。
Transact-SQL エディターが開き、配置後スクリプトが表示されます。
配置後スクリプトの最後に、次の Transact-SQL ステートメントを追加します。
exec sp_addrolemember 'DbAccounting','MyUser';
[ファイル] メニューの [Script.PostDeployment.sql の保存] をクリックします。
次に、データベース プロジェクトの配置プロパティを構成します。
データベース プロジェクトを配置用に構成するには
ソリューション エクスプローラーで、[CompositeDBProject] (データベース プロジェクト) をクリックします。
[プロジェクト] メニューの [CompositeDBProject のプロパティ] をクリックします。
プロジェクトのプロパティが表示されます。
[配置] タブをクリックします。
[配置動作] ボックスの一覧の [配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[ターゲット データベースの設定] の [編集] をクリックし、サーバーへの接続とデータベース プロジェクトを配置するデータベースを指定します。
注意
サーバー オブジェクトのインポート元と同じサーバーを指定しない場合、配置は失敗します。これは、ログインがそのサーバーで定義されているためです。
[ファイル] メニューの [選択されたファイルを上書き保存] をクリックします。
次に、データベース プロジェクトをビルドします。
データベース プロジェクトをビルドするには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
プロジェクトがエラーを発生することなくビルドされます。
次に、データベース プロジェクトをターゲット サーバーとデータベースに配置します。
データベース プロジェクトを配置するには
[ビルド] メニューの [CompositeDBProject の配置] をクリックします。
プロジェクトがエラーを発生することなく配置されます。
プロジェクトのチームでの利用 (省略可能)
プロジェクトをバージョン管理に追加するには
ソリューション エクスプローラーで、CompositeDBProject ソリューションのノードをクリックします。
[ファイル] メニューの [ソース管理] をポイントし、[ソリューションをソース管理に追加] をクリックします。
注意
ここで、インストール済みのバージョン管理ソフトウェアを使用して操作します。 このチュートリアルでは、Visual Studio Team Foundation Server にプロジェクトを追加する手順について説明します。 異なるバージョン管理ソフトウェアを使用する場合、同等の手順を実行してください。
Team Foundation Server を使用している場合は、[Team Foundation Server に接続] ダイアログ ボックスが表示されます。
[Team Foundation Server に接続] で、ソリューションを追加するチーム プロジェクトをホストしているサーバーをクリックします。
注意
データベース プロジェクトを追加できるチーム プロジェクトがない場合は、「プロジェクトの計画および追跡」を参照してください。
[チーム プロジェクト] で、データベース プロジェクトを追加するチーム プロジェクトをクリックし、[OK] をクリックします。
[ソリューション CompositeDBProject をソース管理に追加] ダイアログ ボックスが表示されます。
[OK] をクリックして既定値を受け入れます。
データベース プロジェクトおよびそれを格納するファイルがバージョン管理されます。 最初は、それらはまだチェックアウトされています。 他のチーム メンバーがアクセスする前にチェックインする必要があります。
[表示] メニューの [その他のウィンドウ] をポイントし、[保留中の変更] をクリックします。
[保留中の変更] ウィンドウが表示されます。
[コメント] に、「Initial database project creation」と入力します。
[保留中の変更] ウィンドウのツール バーで、[チェックイン] をクリックします。
データベース プロジェクトおよびそれに含まれているファイルがチェックインされるときに、[チェックインの進行状況] ダイアログ ボックスが表示されます。 ソリューション エクスプローラー内のアイコンが変化し、ファイルがバージョン管理にチェックインされたことを示します。
次の手順
データベース プロジェクトはバージョン管理にチェックインされました。チーム メンバーはデータベース プロジェクトの開発を続行できます。 データベース開発者は、サーバー プロジェクトを変更する必要はありません。 したがって、データベース開発者が共有オブジェクトを表示することはできるが、変更はできないように、アクセス許可を制限できます。