CLR ユーザー定義型CLR User-Defined Types

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

SQL ServerSQL Serverには、.NET Framework 共通言語ランタイム (CLR) で作成されたアセンブリに対してプログラミングされるデータベースオブジェクトを作成する機能が用意されています。gives you the ability to create database objects that are programmed against an assembly created in the .NET Framework common language runtime (CLR). CLR で用意された豊富なプログラミング モデルを使用できるデータベース オブジェクトには、トリガー、ストアド プロシージャ、関数、集計関数、型などがあります。Database objects that can take advantage of the rich programming model provided by the CLR include triggers, stored procedures, functions, aggregate functions, and types.


SQL ServerSQL Server では、CLR コードを実行する機能が既定で無効になっています。The ability to execute CLR code is set to OFF by default in SQL ServerSQL Server. CLR を有効にするには、 sp_configureシステムストアドプロシージャを使用します。The CLR can be enabled by using the sp_configure system stored procedure.

以降では SQL Server 2005 (9.x)SQL Server 2005 (9.x) 、ユーザー定義型 (udt) を使用してサーバーのスカラー型システムを拡張し、データベース内の CLR オブジェクトのストレージを有効にすることができ SQL ServerSQL Server ます。Beginning with SQL Server 2005 (9.x)SQL Server 2005 (9.x), you can use user-defined types (UDTs) to extend the scalar type system of the server, enabling storage of CLR objects in a SQL ServerSQL Server database. 1 つの SQL ServerSQL Server システム データ型で構成される従来の別名データ型とは異なり、UDT には複数の要素や複数の動作を含めることができます。UDTs can contain multiple elements and can have behaviors, differentiating them from the traditional alias data types which consist of a single SQL ServerSQL Server system data type.

UDT はシステム全体からアクセスされるので、UDT を複合データ型に使用すると、パフォーマンスに悪影響を与えることがあります。Because UDTs are accessed by the system as a whole, their use for complex data types may negatively impact performance. 通常、複合データは従来の行やテーブルを使用する場合に最適になるようにモデル化されています。Complex data is generally best modeled using traditional rows and tables. SQL ServerSQL Server の UDT は、次のような場合に適しています。UDTs in SQL ServerSQL Server are well suited to the following:

  • 日付型、時刻型、通貨型、および拡張数値型Date, time, currency, and extended numeric types

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

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

SQL ServerSQL Server で UDT を開発する処理は、次の手順から構成されています。The process of developing UDTs in SQL ServerSQL Server consists of the following steps:

  1. UDT を定義するアセンブリをコーディングしてビルドします。Code and build the assembly that defines the UDT. UDT は、検証可能なコードを生成する .NET Framework 共通言語ランタイム (CLR) でサポートされる任意の言語を使用して定義されます。UDTs are defined using any of the languages supported by the.NET Framework common language runtime (CLR) that produce verifiable code. このような言語には、Visual C# や Visual Basic .NET があります。This includes Visual C# and Visual Basic .NET. データは、.NET Framework のクラスまたは構造体のフィールドやプロパティとして公開され、動作はクラスまたは構造体のメソッドによって定義されます。The data is exposed as fields and properties of a .NET Framework class or structure, and behaviors are defined by methods of the class or structure.

  2. アセンブリを登録します。Register the assembly. UDT は、Visual Studio のユーザー インターフェイスを使用してデータベース プロジェクトに配置することも、Transact-SQLTransact-SQL CREATE ASSEMBLY ステートメントを使用して、クラスまたは構造体を含むアセンブリをデータベースにコピーすることもできます。UDTs can be deployed through the Visual Studio user interface in a database project, or by using the Transact-SQLTransact-SQL CREATE ASSEMBLY statement, which copies the assembly containing the class or structure into a database.

  3. SQL Server で UDT を作成します。Create the UDT in SQL Server. アセンブリがホスト データベースに読み込まれた後、Transact-SQLTransact-SQL CREATE TYPE ステートメントを使用して UDT を作成し、UDT のメンバーとしてクラスまたは構造体のメンバーを公開します。Once an assembly is loaded into a host database, you use the Transact-SQLTransact-SQL CREATE TYPE statement to create a UDT and expose the members of the class or structure as members of the UDT. UDT は 1 つのデータベースのコンテキストにのみ存在します。UDT はいったん登録されると、作成時のベースとなっていた外部ファイルに対する依存関係がなくなります。UDTs exist only in the context of a single database, and, once registered, have no dependencies on the external files from which they were created.


    SQL Server 2005 (9.x)SQL Server 2005 (9.x) より前のバージョンでは、.NET Framework アセンブリから作成された UDT がサポートされていませんでした。Before SQL Server 2005 (9.x)SQL Server 2005 (9.x), UDTs created from .NET Framework assemblies were not supported. ただし、 SQL ServerSQL Server sp_addtypeを使用して別名データ型を使用することもできます。However, you can still use SQL ServerSQL Server alias data types by using sp_addtype. CREATE TYPE 構文を使用すると、ネイティブの SQL ServerSQL Server ユーザー定義データ型と UDT の両方を作成できます。The CREATE TYPE syntax can be used for creating both native SQL ServerSQL Server user-defined data types and UDTs.

  4. UDT を使用してテーブル、変数、またはパラメーターを作成する以降では SQL Server 2005 (9.x)SQL Server 2005 (9.x) 、ユーザー定義型は、テーブルの列定義、バッチ内の変数、 Transact-SQLTransact-SQL または Transact-SQLTransact-SQL 関数やストアドプロシージャの引数として使用できます。Create tables, variables, or parameters using the UDT Beginning with SQL Server 2005 (9.x)SQL Server 2005 (9.x), a user-defined type can be used as the column definition of a table, as a variable in a Transact-SQLTransact-SQL batch, or as an argument of a Transact-SQLTransact-SQL function or stored procedure.

このセクションの内容In This Section

ユーザー定義型を作成するCreating a User-Defined Type
UDT の作成方法について説明します。Describes how to create UDTs.

SQL Server でのユーザー定義型の登録Registering User-Defined Types in SQL Server
SQL ServerSQL Server での UDT の登録方法と管理方法について説明します。Describes how to register and manage UDTs in SQL ServerSQL Server.

SQL Server でのユーザー定義型の使用Working with User-Defined Types in SQL Server
UDT を使用してクエリを作成する方法について説明します。Describes how to create queries using UDTs.

ADO.NET でのユーザー定義型へのアクセスAccessing User-Defined Types in ADO.NET
ADO.NET の .NET Framework Data Provider for SQL ServerSQL Server を使用して UDT を操作する方法について説明します。Describes how to work with UDTs using the .NET Framework Data Provider for SQL ServerSQL Server in ADO.NET.