チュートリアル : SQLCLR オブジェクトを使用するデータベース プロジェクトの作成と配置
SQL 共通言語ランタイム (CLR: Common Language Runtime) アセンブリを使用するデータベースを作成および配置するには、データベース オブジェクトと SQLCLR プロジェクトを作成します。 データベース プロジェクトをビルドして配置すると同時に、そのプロジェクトが参照している SQLCLR アセンブリが自動的に配置されます。
このチュートリアルでは、次のタスクを行います。
単純なデータベース プロジェクトを作成する。
SQLCLR プロジェクトを作成し、新しいデータ型を定義する。
定義した型を SQLCLR アセンブリで使用する。
データベース プロジェクトをビルドおよび配置する。
前提条件
このチュートリアルを完了するには、Visual Studio Team System 2008 Database Edition の GDR (General Distribution Release) をインストールしている必要があります。SQL Server 2005 または SQL Server 2008 のインスタンスにアクセスできる必要があります。 CodePlex Web サイトから SQL Server 用のコード例をインストールしておく必要があります。 データベースをデータベース サーバーに配置するためのアクセス許可が必要です。
データベース プロジェクトを作成する
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] の [データベース プロジェクト] ノードを展開し、[Microsoft SQL Server 2005] または [Microsoft SQL Server 2008] をクリックします。
[テンプレート] ボックスの一覧の [SQL Server 2005 データベース プロジェクト] または [SQL Server 2008 データベース プロジェクト] をクリックします。
[名前] ボックスに「SQLClrDatabaseSandbox」と入力します。
重要 : [場所] ボックスと [ソリューション名] ボックスの既定値は変更しないでください。
[ソリューションのディレクトリを作成] チェック ボックスがまだオンでない場合は、オンにします。
[ソース管理に追加] チェック ボックスがまだオフになっていない場合はオフにし、[OK] をクリックします。
空のデータベース プロジェクトが、ソリューション エクスプローラに表示されます。 次に、SQLCLR アセンブリ用のプロジェクトを作成します。
SQLCLR プロジェクトの作成
SQLCLR プロジェクトを作成するには
[ファイル] メニューの [追加] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] の [データベース プロジェクト] ノードを展開し、[SQL CLR] をクリックします。
[テンプレート] ボックスの一覧で、C# アイコンの横にある [SQL Server プロジェクト] をクリックします。
[名前] ボックスに「SupportingSQLClrObjects」と入力します。
[OK] をクリックして既定の場所をそのまま使用し、ダイアログ ボックスを閉じてプロジェクトを作成します。
空のデータベース プロジェクトが、ソリューション エクスプローラに表示されます。
[データベース参照の追加] ダイアログ ボックスで [キャンセル] をクリックします。
[キャンセル] をクリックすると、アセンブリの配置先をデータベース プロジェクトで決定できるようになります。
次に、SQLCLR アセンブリでカスタム データ型を作成します。
カスタムの SQLCLR データ型を定義するには
[プロジェクト] メニューの [ユーザー定義型の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[名前] ボックスに、「MyCustomType.cs」と入力します。
コード エディタが開き、MyCustomType.cs の内容が表示されます。
メモ : この時点で、各自の要件に適合する実装を提供するには、既定のユーザー定義型を変更する必要があります。 このチュートリアルでは、既定の実装をそのまま使用します。 カスタム型およびその他の SQLCLR オブジェクトの定義方法の詳細については、Microsoft Web サイトの「Using CLR Integration in SQL Server 2005」を参照してください。
[ファイル] メニューの [MyCustomType.cs を保存] をクリックします。
SQLCLR アセンブリを構成およびビルドするには
[ビルド] メニューの [構成マネージャ] をクリックします。
[構成マネージャ] ダイアログ ボックスが表示されます。
[プロジェクトのコンテキスト] で、SupportingSQLClrObjects アセンブリの行の [配置] チェック ボックスをオフにします。
このチェック ボックスをオフにすると、ソリューションの配置時にはアセンブリが配置されません。 アセンブリはデータベース プロジェクトと共に配置されるので、アセンブリを 2 回配置する必要はありません。
[閉じる] をクリックします。
ソリューション エクスプローラで SupportingSQLClrObjects プロジェクトを右クリックし、[ビルド] をクリックします。
アセンブリはエラーなしでビルドされます。
次に、新しいアセンブリを参照し、そのアセンブリで定義した型を使用します。
SQLCLR アセンブリで定義した型の使用
SQCLR アセンブリで定義した型を使用するには、データベース プロジェクトからそのアセンブリへの参照を追加する必要があります。 その後、新しいデータ型をオブジェクト定義の中で使用できるように、データベース プロジェクトにデータ型を定義します。
SQLCLR アセンブリへの参照を追加するには
ソリューション エクスプローラで、SQLClrDatabaseSandbox プロジェクトを展開し、[参照] ノードを右クリックし、[参照の追加] をクリックします。
メモ : ソリューション エクスプローラで SQLClrDatabaseSandbox プロジェクトをクリックし、[プロジェクト] メニューを開いて [参照の追加] をクリックすることもできます。
[参照の追加] ダイアログ ボックスが開きます。
[プロジェクト] タブで、SupportingSQLClrObjects プロジェクトが強調表示されていることを確認し、[OK] をクリックします。
SQLCLR への参照がデータベース プロジェクトに追加されます。
ソリューション エクスプローラで [参照] ノードを展開し、SupportingSQLClrObjects ノードをクリックして、F4 キーを押します。
参照のプロパティが表示されます。
[ローカル コピー] が [true] に設定され、[アクセス許可のレベル] が [セーフ] に設定されていることを確認します。
[アセンブリ名] プロパティで、SqlClassLibrary を SupportingSQLClrObjects に置き換えます。
[ファイル] メニューの [すべてを保存] をクリックします。
指定したプロパティは、プロジェクトのビルド時に作成される CREATE ASSEMBLY ステートメントを制御します。
次に、SQLCLR プロジェクトで作成されるアセンブリを使用するデータ型を定義します。
新しいデータ型を定義するには
[表示] メニューの [エラー一覧] をクリックします。
[表示] メニューの [スキーマ ビュー] をクリックします。
[SQLClrDatabaseSandbox] ノード、[スキーマ] ノード、[dbo] ノード、[プログラマビリティ] ノードの順に展開します。
[型] ノードを右クリックし、[追加] をポイントし、[ユーザー定義型 CLR] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [ユーザー定義型 (CLR)] が強調表示されていることを確認します。
[名前] ボックスに「MyCustomType」と入力し、[追加] をクリックします。
Transact-SQL (T-SQL) エディタに型の定義が表示されます。 [エラー一覧] に、次のエラーが表示されます。
SR0029 : Microsoft.Validation : User Defined Type: [dbo].[MyCustomType] has an unresolved reference to Assembly [assembly_name]
T-SQL エディタで、コードを次のように更新します。
CREATE TYPE [dbo].[MyCustomType] EXTERNAL NAME [SupportingSQLClrObjects].[MyCustomType]
[ファイル] メニューの [MyCustomType.udtclr.sql の保存] をクリックします。
有効なアセンブリとクラスを参照するように型定義を更新したので、[エラー一覧] からエラーが消えます。
次に、新しいデータ型を使用する単純なテーブルを定義します。
新しいデータ型をテーブル定義で使用するには
スキーマ ビューで、[スキーマ] ノード、[dbo] ノードの順に展開し、[テーブル] ノードを見つけます。
[テーブル] ノードを右クリックし、[追加] をポイントし、[テーブル] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [テーブル] が強調表示されていることを確認します。
[名前] ボックスに「SimpleTable」と入力し、[追加] をクリックします。
T-SQL エディタにテーブルの定義が表示されます。
T-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] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
次に、データベース プロジェクトをビルドします。
データベース プロジェクトをビルドおよび配置するには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトと SQLCLR アセンブリ プロジェクトが正常にビルドされます。
[ビルド] メニューの [ソリューションの配置] をクリックします。
データベース プロジェクトと SQLCLR アセンブリが、配置設定に指定したターゲット サーバーとデータベースに配置されます。 さらに、次のメッセージが [出力] ウィンドウに表示されます。
========== 配置: 1 正常終了、0 失敗、1 スキップ ========== データベース プロジェクトは正常に配置されました。 データベース プロジェクトを配置したときに、SQLCLR アセンブリも配置しました。 SQLCLR アセンブリを別途配置する必要はありませんでした。これは、ソリューションを配置したときにスキップされたためです。
次の手順
この後、単体テストとデータ生成計画を作成して、アセンブリをテストできます。 詳細については、「データベース プロジェクトの構成とテスト配置の実行」を参照してください。
参照
概念
SQLCLR オブジェクトを参照するデータベースのチーム開発の開始
共有サーバー オブジェクトを参照するデータベースのチーム開発の開始
その他の技術情報
シナリオ : データベース サーバー上のオブジェクトのチーム開発の開始
シナリオ : データベース サーバー エンドポイントのチーム開発の開始