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