CLR ユーザー定義型

適用対象:SQL Server

SQL Serverでは、.NET Framework共通言語ランタイム (CLR) で作成されたアセンブリに対してプログラムされたデータベース オブジェクトを作成できます。 CLR で用意された豊富なプログラミング モデルを使用できるデータベース オブジェクトには、トリガー、ストアド プロシージャ、関数、集計関数、型などがあります。

注意

SQL Serverでは、CLR コードを実行する機能は既定で OFF に設定されています。 CLR は、 sp_configure システム ストアド プロシージャを使用して有効にすることができます。

SQL Server 2005 (9.x) 以降では、ユーザー定義型 (UDT) を使用してサーバーのスカラー型システムを拡張し、SQL Server データベース内の CLR オブジェクトのストレージを有効にすることができます。 UDT は複数の要素を持つことができ、動作を定義できます。この点は、1 つの SQL Server システム データ型から構成される従来の別名データ型と異なります。

UDT はシステム全体からアクセスされるので、UDT を複合データ型に使用すると、パフォーマンスに悪影響を与えることがあります。 通常、複合データは従来の行やテーブルを使用する場合に最適になるようにモデル化されています。 SQL Serverの UDT は、次に適しています。

  • 日付型、時刻型、通貨型、および拡張数値型

  • 地理空間アプリケーション

  • エンコードされたデータまたは暗号化されたデータ

SQL Serverで UDT を開発するプロセスは、次の手順で構成されます。

  1. UDT を定義するアセンブリをコーディングしてビルドします。 UDT は、検証可能なコードを生成する .NET Framework 共通言語ランタイム (CLR) でサポートされる任意の言語を使用して定義されます。 このような言語には、Visual C# や Visual Basic .NET があります。 データは、.NET Framework のクラスまたは構造体のフィールドやプロパティとして公開され、動作はクラスまたは構造体のメソッドによって定義されます。

  2. アセンブリを登録します。 UDT は、データベース プロジェクトの Visual Studio ユーザー インターフェイスを使用して、またはクラスまたは構造体を含むアセンブリをデータベースにコピーする Transact-SQL CREATE ASSEMBLY ステートメントを使用して配置できます。

  3. SQL Server で UDT を作成します。 アセンブリがホスト データベースに読み込まれたら、Transact-SQL CREATE TYPE ステートメントを使用して UDT を作成し、クラスまたは構造体のメンバーを UDT のメンバーとして公開します。 UDT は 1 つのデータベースのコンテキストにのみ存在します。UDT はいったん登録されると、作成時のベースとなっていた外部ファイルに対する依存関係がなくなります。

    注意

    SQL Server 2005 (9.x) より前は、.NET Framework アセンブリから作成された UDT はサポートされていませんでした。 ただし、sp_addtypeを使用して、SQL Server別名データ型を使用することもできます。 CREATE TYPE 構文は、ネイティブ SQL Serverユーザー定義データ型と UDT の両方を作成するために使用できます。

  4. UDT を使用してテーブル、変数、またはパラメーターを作成するSQL Server 2005 (9.x) 以降では、テーブルの列定義として、Transact-SQL バッチの変数として、または Transact-SQL 関数またはストアド プロシージャの引数として、ユーザー定義型を使用できます。

このセクションの内容

User-Defined型の作成
UDT の作成方法について説明します。

SQL Server でのユーザー定義型の登録
SQL Serverで UDT を登録および管理する方法について説明します。

SQL Server でのユーザー定義型の使用
UDT を使用してクエリを作成する方法について説明します。

ADO.NET でのユーザー定義型へのアクセス
ADO.NET のSQL Server用.NET Framework データ プロバイダーを使用して UDT を操作する方法について説明します。