CLR ユーザー定義型
Microsoft SQL Server 2005 では、Microsoft .NET Framework CLR (共通言語ランタイム) で作成されているアセンブリでプログラミングされているデータベース オブジェクトを作成できます。CLR で用意された豊富なプログラミング モデルを使用できるデータベース オブジェクトには、トリガ、ストアド プロシージャ、関数、集計関数、型などがあります。
メモ : |
---|
SQL Server 2005 では、CLR コードを実行する機能は既定で無効になっています。CLR を有効にするには、sp_configure システム ストアド プロシージャを使用します。 |
SQL Server 2005 では UDT (ユーザー定義型) が導入されたことにより、サーバーのスカラ型システムを拡張し、SQL Server データベースに CLR オブジェクトを格納できます。1 つの SQL Server システム データ型で構成される従来の別名データ型とは異なり、UDT には複数の要素や複数の動作を含めることができます。
UDT はシステム全体からアクセスされるので、UDT を複合データ型に使用すると、パフォーマンスに悪影響を与えることがあります。通常、複合データは従来の行やテーブルを使用する場合に最適になるようにモデル化されています。SQL Server 2005 の UDT は、次のような場合に適しています。
- 日付型、時刻型、通貨型、および拡張数値型
- 地理空間アプリケーション
- エンコードされたデータまたは暗号化されたデータ
SQL Server 2005 で UDT を開発する処理は、次の手順から構成されています。
- UDT を定義するアセンブリをコーディングしてビルドします。 UDT の定義には、Microsoft .NET Framework CLR (共通言語ランタイム) でサポートされている、検証可能なコードを生成する任意の言語を使用します。このような言語には、Microsoft Visual C# や Microsoft Visual Basic .NET があります。データは、.NET Framework のクラスまたは構造体のフィールドやプロパティとして公開され、動作はクラスまたは構造体のメソッドによって定義されます。
- アセンブリを登録します。 UDT は、Microsoft Visual Studio のユーザー インターフェイスを使用してデータベース プロジェクトに配置することも、Transact-SQL CREATE ASSEMBLY ステートメントを使用して、クラスまたは構造体を含むアセンブリをデータベースにコピーすることもできます。
- SQL Server で UDT を作成します。 アセンブリがホスト データベースに読み込まれた後、Transact-SQL CREATE TYPE ステートメントを使用して UDT を作成し、UDT のメンバとしてクラスまたは構造体のメンバを公開します。UDT は 1 つのデータベースのコンテキストにのみ存在します。UDT はいったん登録されると、作成時のベースとなっていた外部ファイルに対する依存関係がなくなります。
メモ : .NET Framework アセンブリから作成した UDT は、以前のバージョンの SQL Server ではサポートされません。ただし、SQL Server の別名データ型は sp_addtype を使用することで、SQL Server 2005 でもサポートされます。CREATE TYPE 構文を使用すると、ネイティブの SQL Server ユーザー定義データ型と UDT の両方を作成できます。 - **UDT を使用したテーブル、変数、またはパラメータを作成します。 **SQL Server 2005 では、ユーザー定義型を、テーブルの列定義、Transact-SQL バッチの変数、Transact-SQL 関数またはストアド プロシージャの引数として使用できます。詳細については、「CLR ユーザー定義型の使用」を参照してください。
このセクションの内容
- ユーザー定義型の作成
UDT の作成方法について説明します。
- SQL Server でのユーザー定義型の登録
SQL Server での UDT の登録方法と管理方法について説明します。
- SQL Server でのユーザー定義型の使用
UDT を使用してクエリを作成する方法について説明します。
- ADO.NET でのユーザー定義型へのアクセス
ADO.NET の .NET Framework Data Provider for SQL Server を使用して UDT を操作する方法について説明します。