SQL Server 共通言語ランタイム (SQL CLR) アセンブリを使用するデータベースを作成して配置するには、データベース プロジェクトと SQL CLR プロジェクトを作成します。 データベース プロジェクトをビルドして配置するときに、それが同時に参照する SQL CLR アセンブリが自動的に配置されます。
このチュートリアルでは、次のタスクを行います。
簡単なデータベース プロジェクトを作成する。
SQL CLR プロジェクトを作成して新しいデータ型を定義する。
SQL CLR アセンブリに定義した型を使用する。
データベース プロジェクトをビルドおよび配置する。
必須コンポーネント
このチュートリアルを完了するには、Visual Studio 2010 Premium がインストールされている必要があります。SQL Server 2005 または SQL Server 2008 のインスタンスにアクセスできる必要があります。 SQL Server のコード サンプルは、「CodePlex」Web サイトから入手してインストールする必要があります。 データベースをデータベース サーバーに配置するための権限が必要です。
データベース プロジェクトの作成
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードをクリックします。
注意
Visual Studio 2010 Professional を使用している場合は、[SQL Server] をクリックする前に、[詳細設定] ノードを展開する必要もあります。
テンプレートの一覧の [SQL Server 2008 データベース プロジェクト] をクリックします。
[名前] ボックスに「SQLClrDatabaseSandbox」と入力します。
重要
[場所] および [ソリューション名] の既定値は変更しないでください。
[ソリューションのディレクトリを作成] チェック ボックスがまだオンになっていない場合はオンにします。
[ソース管理に追加] チェック ボックスがまだオフになっていない場合はオフにし、[OK] をクリックします。
空のデータベース プロジェクトが、ソリューション エクスプローラーに表示されます。
次に、SQL CLR アセンブリのプロジェクトを作成します。
SQL CLR プロジェクトの作成
SQL CLR プロジェクトを作成するには
[ファイル] メニューの [追加] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] の [データベース] ノードを展開し、[SQL Server] をクリックします。
[テンプレート] ボックスの一覧で、[Visual Basic SQL CLR データベース プロジェクト] または [Visual C# SQL CLR データベース プロジェクト] をクリックします。
[名前] ボックスに「SupportingSQLClrObjects」と入力します。
[OK] をクリックして既定の場所をそのまま使用し、ダイアログ ボックスを閉じて、プロジェクトを作成します。
空のデータベース プロジェクトが、ソリューション エクスプローラーに表示されます。
[データベース参照の追加] ダイアログ ボックスの [キャンセル] をクリックします。
[キャンセル] をクリックすることにより、アセンブリを配置する場所をデータベース プロジェクトで指定できるようになります。
次に、SQL CLR アセンブリにカスタム データ型を作成します。
カスタム SQL CLR データ型を定義するには
[プロジェクト] メニューの [ユーザー定義型の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[名前] ボックスに、「MyCustomType.cs」と入力します。
コード エディターが開き、MyCustomType.cs の内容が表示されます。
注意
この時点で、既定のユーザー定義型を変更して、要件を満たす実装を用意する必要があります。 このチュートリアルの場合は、既定の実装をそのまま使用します。 ユーザー定義型およびその他の SQL CLR オブジェクトを定義する方法の詳細については、Microsoft Web サイトの「Using CLR Integration in SQL Server 2005 (SQL Server 2005 で CLR 統合を使用する)」を参照してください。
[ファイル] メニューの [MyCustomType.cs の保存] をクリックします。
SQL CLR アセンブリを構成およびビルドするには
[ビルド] メニューの [構成マネージャー] をクリックします。
[構成マネージャー] ダイアログ ボックスが表示されます。
[プロジェクトのコンテキスト] で、SupportingSQLClrObjects アセンブリの行の [配置] チェック ボックスをオフにします。
このチェック ボックスをオフにすると、ソリューションを配置するときにアセンブリは配置されません。 アセンブリはデータベース プロジェクトと共に配置されるため、アセンブリを 2 回配置する必要はありません。
[閉じる] をクリックします。
ソリューション エクスプローラーで SupportingSQLClrObjects プロジェクトを右クリックし、[ビルド] をクリックします。
アセンブリがエラーを発生することなくビルドされます。
次に、新しいアセンブリを参照し、そのアセンブリに定義した型を使用します。
SQL CLR アセンブリに定義した型の使用
SQCLR アセンブリに定義した型を使用するには、データベース プロジェクトからそのアセンブリに参照を追加する必要があります。 その後、オブジェクト定義で新しいデータ型を使用できるように、データベース プロジェクトでデータ型を定義します。
SQL CLR アセンブリの参照を追加するには
ソリューション エクスプローラーで、SQLClrDatabaseSandbox プロジェクトを展開し、[参照設定] ノードを右クリックします。次に、[参照の追加] をクリックします。
注意
ソリューション エクスプローラーで、SQLClrDatabaseSandbox プロジェクトをクリックし、[プロジェクト] メニューを開いて、[参照の追加] をクリックすることもできます。
[参照の追加] ダイアログ ボックスが表示されます。
[プロジェクト] タブで、SupportingSQLClrObjects プロジェクトが強調表示されていることを確認して、[OK] をクリックします。
SQL CLR プロジェクトへの参照がデータベース プロジェクトに追加されます。
ソリューション エクスプローラーで、[参照] ノードを展開し、[SupportingSQLClrObjects] ノードをクリックして、F4 キーを押します。
参照のプロパティが表示されます。
[ローカルにコピー] が [True] に設定され、[アクセス許可のレベル] が [セーフ] に設定されていることを確認します。
[アセンブリ名] プロパティで、SqlClassLibrary を SupportingSQLClrObjects に置き換えます。
[所有者] プロパティに、「dbo」と入力します。
別の所有者を指定できます。
[ファイル] メニューの [すべてを保存] をクリックします。
指定したプロパティによって、プロジェクトをビルドするときに作成される CREATE ASSEMBLY ステートメントが制御されます。
次に、SQL CLR プロジェクトで生成されるアセンブリを使用するデータ型を定義します。
新しいデータ型を定義するには
[表示] メニューの [エラー一覧] および [データベース スキーマ ビュー] をクリックします。
[SQLClrDatabaseSandbox] ノード、[スキーマ] ノード、[dbo] ノード、[プログラミング] ノードの順に展開します。
[型] ノードを右クリックし、[追加] をポイントします。次に、[ユーザー定義型 CLR] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] で、[ユーザー定義型 (CLR)] が強調表示されていることを確認します。
[名前] ボックスに、「MyCustomType」と入力し、[追加] をクリックします。
Transact-SQL エディターが表示され、型の定義が表示されます。 [エラー一覧] ウィンドウに、次のエラーが表示されます。
SR0029 : Microsoft.Validation : User Defined Type: [dbo].[MyCustomType] has an unresolved reference to Assembly [assembly_name]
Transact-SQL エディターで、コードを次のように変更します。
CREATE TYPE [dbo].[MyCustomType] EXTERNAL NAME [SupportingSQLClrObjects].[MyCustomType]
[ファイル] メニューの [MyCustomType.udtclr.sql の保存] をクリックします。
有効なアセンブリとクラスを参照する型定義を更新したため、[エラー一覧] ウィンドウのエラーの表示が消えます。
次に、新しいデータ型を使用する簡単なテーブルを定義します。
テーブル定義で新しいデータ型を使用するには
[スキーマ ビュー] で、[スキーマ] ノードを開き、[dbo] ノードを開きます。
[テーブル] ノードを右クリックし、[追加] をポイントします。次に、[テーブル] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] で、[テーブル] が強調表示されていることを確認します。
[名前] ボックスに、「SimpleTable」と入力し、[追加] をクリックします。
Transact-SQL エディターが表示され、テーブルの定義が表示されます。
Transact-SQL エディターで、コードを次のように変更します。
CREATE TABLE [dbo].[SimpleTable] ( column_1 int NOT NULL, column_2 [dbo].[MyCustomType] NULL )
[ファイル] メニューの [dbo.SimpleTable.table.sql の保存] をクリックします。
次に、データベース プロジェクトを構成し、それを分離開発環境に配置します。
データベース プロジェクトのビルドおよび配置
ビルド設定を構成するには
ソリューション エクスプローラーで、[SQLClrDatabaseSandbox] をクリックします。
[プロジェクト] メニューの [SQLClrDatabaseSandbox のプロパティ] をクリックします。
[ビルド] タブをクリックし、既定の設定を確認します。
このチュートリアルでは、既定の設定を使用できます。
次に、配置設定を構成します。
配置設定を構成するには
[配置] タブをクリックします。
[配置動作] ボックスの一覧の [配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[配置設定の構成] (配置設定の構成) ボックスの一覧の [マイ分離開発環境] をクリックします。
この設定を指定することで、分離開発環境にのみ影響する値を構成します。 データベース プロジェクトの設定は変更しません。
[配置スクリプト名] については、既定値をそのまま使用します。
[ターゲット データベースの設定] の [編集] をクリックし、ターゲット接続を指定します。
[接続のプロパティ] ダイアログ ボックスで、データベース プロジェクトを配置するサーバーおよびデータベースへの接続を指定し、[OK] をクリックします。
[ターゲット データベース名] については、既定値をそのまま使用します。
[配置構成ファイル] ボックスの一覧の [Properties\Database.deploymentconfig] をクリックします。
既定では、分離開発環境は、配置設定の詳細設定には関連付けられていません。 このファイルを指定すると、データベース プロジェクトに関連付けられた配置設定が使用されます。 また、別の構成ファイルを作成し、分離開発環境用に設定を変更することもできます。
[SQL コマンド変数ファイル] ボックスの一覧の [Properties\Database.sqlcmdvars] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
次に、データベース プロジェクトをビルドします。
データベース プロジェクトをビルドおよび配置するには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトと SQL CLR アセンブリ プロジェクトが正常にビルドされます。
[ビルド] メニューの [ソリューションの配置] をクリックします。
データベース プロジェクトと SQL CLR アセンブリが、配置設定で指定したターゲット サーバーとデータベースに配置されます。 [出力] ウィンドウに次のメッセージが表示されます。
========== 配置: 1 正常終了、0 失敗、0 スキップ ==========
これで、データベース プロジェクトが正常に配置されました。 データベース プロジェクトを配置したときに、SQL CLR アセンブリも配置しました。 SQL CLR アセンブリを別個に配置する必要はありませんでした。これは、ソリューションを配置したときにスキップされたためです。
プロジェクトのチームでの利用 (省略可能)
プロジェクトをバージョン管理に追加するには
ソリューション エクスプローラーで、[SQLClrDatabaseSandbox] ノードをクリックします。
[ファイル] メニューの [ソース管理] をポイントし、[ソリューションをソース管理に追加] をクリックします。
ここで、インストール済みのバージョン管理ソフトウェアを使用して操作します。 このチュートリアルでは、Visual Studio Team Foundation Server にプロジェクトを追加する手順について説明します。 異なるバージョン管理ソフトウェアを使用する場合、同等の手順を実行してください。 Team Foundation Server を使用している場合は、[Team Foundation Server に接続] ダイアログ ボックスが表示されます。
[Team Foundation Server に接続] で、ソリューションを追加するチーム プロジェクトをホストしているサーバーをクリックします。
注意
データベース プロジェクトを追加できるチーム プロジェクトがない場合は、「プロジェクトの計画および追跡」を参照してください。
[チーム プロジェクト] で、データベース プロジェクトを追加するチーム プロジェクトをクリックし、[OK] をクリックします。
[ソリューション SQLClrDatabaseSandbox をソース管理に追加] ダイアログ ボックスが表示されます。
[OK] をクリックして既定値を受け入れます。
データベース プロジェクトおよびそれを格納するファイルがバージョン管理されます。 最初は、それらはまだチェックアウトされています。 他のチーム メンバーがアクセスする前にチェックインする必要があります。
[表示] メニューの [その他のウィンドウ] をポイントし、[保留中の変更] をクリックします。
[保留中の変更] ウィンドウが表示されます。
[コメント] ボックスに、「Initial database project creation」と入力します。
[保留中の変更] ウィンドウで、ツール バーの [チェックイン] をクリックします。
データベース プロジェクトおよびそれに含まれているファイルがチェックインされるときに、[チェックインの進行状況] ダイアログ ボックスが表示されます。 ソリューション エクスプローラー内でアイコンが変わり、ファイルがバージョン管理にチェックインされたことを示します。
次の手順
次に、データベース単体テストとデータ生成計画を作成して、アセンブリをテストできます。 詳細については、「データベース プロジェクトの構成とテスト配置の実行」を参照してください。
参照
概念
SQLCLR オブジェクトを参照するデータベースのチーム開発の開始