CREATE TYPE (Transact-SQL)
更新 : 2006 年 4 月 14 日
SQL Server 2005 のインスタンスで別名データ型またはユーザー定義型を作成します。別名データ型の実装は、SQL Server のネイティブ システム型に基づきます。ユーザー定義型は、Microsoft .NET Framework 共通言語ランタイム (CLR) のアセンブリのクラスを使用して実装します。SQL Server 2005 でユーザー定義型を実装にバインドするには、先に CREATE ASSEMBLY を使用して、その実装を含む CLR アセンブリを SQL Server で登録しておく必要があります。
メモ : |
---|
既定では、SQL Server の CLR コード実行機能は無効になっています。マネージ コード モジュールを参照するデータベース オブジェクトを作成、変更、および削除できますが、それらの参照を SQL Server で実行するには、sp_configure を使用して clr enabled オプションを有効にする必要があります。 |
構文
CREATE TYPE [ schema_name. ] type_name
{
FROM base_type
[ ( precision [ , scale ] ) ]
[ NULL | NOT NULL ]
| EXTERNAL NAME assembly_name [ .class_name ]
} [ ; ]
引数
- schema_name
別名データ型またはユーザー定義型が所属しているスキーマの名前です。
- type_name
別名データ型またはユーザー定義型の名前です。型の名前は、識別子の規則に従っている必要があります。
base_type
別名データ型の基になる、SQL Server 提供のデータ型です。base_type は sysname であり、既定値はありません。有効値は次のとおりです。bigint
binary(n)
bit
char(n)
datetime
decimal
float
image
int
money
nchar(n)
ntext
numeric
nvarchar(n | max)
real
smalldatetime
smallint
smallmoney
sql_variant
text
tinyint
uniqueidentifier
varbinary(n | max)
varchar(n | max)
また base_type は、これらのシステム データ型のいずれかにマップする任意のデータ型のシノニムにすることもできます。
- precision
decimal 型または numeric 型の場合は、格納可能な 10 進数の最大桁数を示す、負ではない整数です。これは、小数点の左側と右側の桁数の合計です。詳細については、「decimal 型と numeric 型 (Transact-SQL)」を参照してください。
- scale
decimal 型または numeric 型の場合は、小数点の右側にとることができる 10 進数の最大桁数を示す、負ではない整数です。有効桁数以下の数値である必要があります。詳細については、「decimal 型と numeric 型 (Transact-SQL)」を参照してください。
- NULL | NOT NULL
型が NULL 値を保持できるかどうかを指定します。指定しない場合は、NULL が既定値です。
- assembly_name
共通言語ランタイム内のユーザー定義型の実装を参照する SQL Server のアセンブリを指定します。assembly_name は、SQL Server の現在のデータベース内の既存のアセンブリに一致している必要があります。
- **[.**class_name ]
ユーザー定義型を実装するアセンブリ内のクラスを指定します。class_name は有効な識別子であり、アセンブリ内にアセンブリで可視のクラスとして存在している必要があります。class_name は、対応するアセンブリ内のクラス名に正確に一致している必要があります。大文字と小文字は、データベース照合順序に関係なく区別されます。クラスの記述に使用されている C# などのプログラミング言語が、名前空間の概念を使用している場合、クラス名は、角かっこ ([ ]) で囲まれた名前空間で修飾された名前にすることができます。class_name を指定しなかった場合、SQL Server では、type_name と同じにするものと見なされます。
解説
CREATE TYPE を使用して CLR ユーザー定義型を作成する場合、データベース互換性は 90 である必要があります。
assembly_name とそのメソッドで参照されているアセンブリのクラスは、SQL Server でユーザー定義型を実装するためのすべての要件を満たしている必要があります。これらの要件の詳細については、「CLR ユーザー定義型」を参照してください。
その他、次のような注意事項があります。
- クラスにはオーバーロードされたメソッドが存在する可能性があります。ただし、これらのメソッドはマネージ コード内からのみ呼び出すことができ、Transact-SQL から呼び出すことはできません。
- assembly_name が SAFE または EXTERNAL_ACCESS の場合、すべての静的メンバは const または readonly として宣言する必要があります。
データベース内では、SQL Server で CLR からアップロードされた任意の指定された型に対して、1 つのユーザー定義型のみを登録できます。データベース内にユーザー定義型が既に存在する CLR 型に対してユーザー定義型を作成した場合、CREATE TYPE は失敗し、エラーが発生します。この制約が必要なのは、CLR 型を複数のユーザー定義型にマップすることが可能な場合の、SQL 型の解決時のあいまいな状態を避けるためです。
型のミューテータ メソッドが void を返さない場合、CREATE TYPE ステートメントは実行されません。
ユーザー定義型を変更するには、DROP TYPE ステートメントを使用して型を削除してから、再作成する必要があります。
sp_addtype を使用して作成したユーザー定義型と異なり、CREATE TYPE を使用して作成した型に対しては、データベース ロール public に REFERENCES 権限が自動的に付与されるわけではありません。この権限は個別に付与する必要があります。
権限
現在のデータベース内の CREATE TYPE 権限、および schema_name に対する ALTER 権限が必要です。schema_name を指定しなかった場合は、現在のユーザーのスキーマを判断するための既定の名前解決ルールが適用されます。assembly_name を指定した場合は、ユーザーがそのアセンブリの所有者であるか、そのアセンブリに対する REFERENCES 権限を持っている必要があります。
例
A. varchar データ型に基づいた別名型を作成する
次の例では、システムから提供されている varchar
データ型に基づいて、別名型を作成します。
CREATE TYPE SSN
FROM varchar(11) NOT NULL ;
B. ユーザー定義型を作成する
次の例では、アセンブリ utf8string
内のクラス utf8string
を参照する型 Utf8String
を作成します。型を作成する前に、アセンブリ utf8string
がローカル データベースに登録されます。
CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO
参照
関連項目
CREATE ASSEMBLY (Transact-SQL)
DROP TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)
その他の技術情報
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 4 月 14 日 |
|