sql_variant (Transact-SQL)
このデータ型には、SQL Server でサポートしている各種データ型の値が格納されます。
適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで) |
構文
sql_variant
説明
sql_variant は、ユーザー定義関数の列、パラメーター、変数、および戻り値で使用できます。 sql_variant を使用することで、これらのデータベース オブジェクトは、他のデータ型の値をサポートできます。
sql_variant 型の列には、異なるデータ型の行を格納できます。 たとえば、sql_variant として定義される列には、int 値、binary 値、および char 値を格納できます。 次の表に、sql_variant を使用しても値を格納できないデータ型を示します。
varchar(max) |
varbinary(max) |
nvarchar(max) |
xml |
text |
ntext |
image |
rowversion (timestamp) |
sql_variant |
geography |
hierarchyid |
geometry |
ユーザー定義データ型 |
datetimeoffset |
sql_variant 型の最大長は 8,016 バイトです。 これには、基本データ型に関する情報と値の両方が含まれます。 実際の基本データ型値の最大長は、8,000 バイトです。
sql_variant 型は、加算や減算などの処理を受ける前に、まず基本のデータ型値に型変換する必要があります。
sql_variant には既定値を割り当てることができます。 このデータ型は、基になる値として NULL を持つこともできますが、NULL 値には基本データ型は関連付けられていません。 また、sql_variant は、別の sql_variant をその基本データ型として使用することができません。
一意キー、主キー、または外部キーに sql_variant 型の列を含めることは可能ですが、特定の行のキーを構成するデータ値の全体の長さが、インデックスの最大長を超えないようにする必要があります。 この最大長は 900 バイトです。
テーブルには、任意の数の sql_variant 列を設定できます。
sql_variant は、CONTAINSTABLE と FREETEXTTABLE では使用できません。
ODBC は、sql_variant を完全にはサポートしていません。 Microsoft OLE DB Provider for ODBC (MSDASQL) を使用している場合、sql_variant 列のクエリはバイナリ データとして返されます。 たとえば、sql_variant 列に "PS2091" という文字列データが含まれている場合、これは 0x505332303931 として返されます。
sql_variant 値の比較
sql_variant 型は、変換用のデータ型階層リストの先頭に位置しています。 sql_variant 値の比較を行う場合、SQL Server データ型階層の順序は、データ型ファミリにグループ化されます。
データ型階層 |
データ型ファミリ |
---|---|
sql_variant |
sql_variant |
datetime2 |
日付と時刻 |
datetimeoffset |
日付と時刻 |
datetime |
日付と時刻 |
smalldatetime |
日付と時刻 |
date |
日付と時刻 |
time |
日付と時刻 |
float |
概数型 |
real |
概数値 |
decimal |
真数型 |
money |
正確な数値 |
smallmoney |
正確な数値 |
bigint |
正確な数値 |
int |
正確な数値 |
smallint |
正確な数値 |
tinyint |
正確な数値 |
bit |
正確な数値 |
nvarchar |
Unicode |
nchar |
Unicode |
varchar |
Unicode |
char |
Unicode |
varbinary |
バイナリ |
binary |
バイナリ |
uniqueidentifier |
Uniqueidentifier |
sql_variant 値の比較には、以下のルールが適用されます。
基本データ型が異なる sql_variant 型の値を比較するとき、基本データ型のデータ型ファミリが異なる場合は、階層グラフでデータ型ファミリが高位の値が 2 つの値のうちでより高い値と判断されます。
基本データ型が異なる sql_variant 型の値を比較するとき、基本データ型のデータ型ファミリが同じ場合、階層グラフで基本データ型が低位の値は、暗黙的に一方のデータ型に変換され、その後比較が行われます。
データ型が char、varchar、nchar、または nvarchar である sql_variant 値の比較では、LCID、LCID バージョン、比較フラグ、および並べ替え ID の各基準に基づいて、値の照合順序がまず比較されます。 これらの基準は、ここで示した順序に従って、それぞれ整数値として比較されます。 基準がすべて等しい場合は、照合順序に従って実際の文字列値が比較されます。
sql_variant 型データの変換
sql_variant 型を処理する場合、SQL Server は他のデータ型のオブジェクトから sql_variant 型への暗黙的な変換をサポートします。 しかし、SQL Server では、sql_variant 型のデータから他のデータ型のオブジェクトへの暗黙的な変換はサポートされません。