sql_variant (Transact-SQL)

このデータ型には、SQL Server でサポートしている各種データ型の値が格納されます。

トピック リンク アイコンTransact-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 の各基準に基づいて、値の照合順序がまず比較されます。これらの基準は、ここで示した順序に従って、それぞれ整数値として比較されます。基準がすべて等しい場合は、照合順序に従って実際の文字列値が比較されます。