sql_variant (Transact-SQL)sql_variant (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このデータ型には、SQL ServerSQL Server でサポートしている各種データ型の値が格納されます。A data type that stores values of various SQL ServerSQL Server-supported data types.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

sql_variant  

RemarksRemarks

sql_variant 列、パラメーター、変数、およびユーザー定義関数の戻り値で使用できます。sql_variant can be used in columns, parameters, variables, and the return values of user-defined functions. sql_variant 他のデータ型の値をサポートするためにこれらのデータベース オブジェクトを使用します。sql_variant enables these database objects to support values of other data types.

型の列 sql_variant 別のデータ型の行を含めることができます。A column of type sql_variant may contain rows of different data types. たとえば、列として定義されている sql_variant 格納できる int, 、バイナリ, と char 値。For example, a column defined as sql_variant can store int, binary, and char values.

sql_variant 8,016 バイトの最大長を持つことができます。sql_variant can have a maximum length of 8016 bytes. これには、基本データ型に関する情報と値の両方が含まれます。This includes both the base type information and the base type value. 実際の基本データ型値の最大長は、8,000 バイトです。The maximum length of the actual base type value is 8,000 bytes.

A sql_variant 加算や減算などの操作に参加する前に、基本データ型の値にデータ型がキャスト最初にする必要があります。A sql_variant data type must first be cast to its base data type value before participating in operations such as addition and subtraction.

sql_variant 既定値を割り当てることができます。sql_variant can be assigned a default value. このデータ型は、基になる値として NULL を持つこともできますが、NULL 値には基本データ型は関連付けられていません。This data type can also have NULL as its underlying value, but the NULL values will not have an associated base type. また、 sql_variant 別に持つことはできません sql_variant をその基本型です。Also, sql_variant cannot have another sql_variant as its base type.

一意、主キー、または外部キーは、型の列を含めることが sql_variant, 、でも、特定の行のキーを構成するデータ値の合計の長さは、インデックスの最大長を超えるを使用できないする必要があります。A unique, primary, or foreign key may include columns of type sql_variant, but the total length of the data values that make up the key of a specific row should not be more than the maximum length of an index. この最大長は 900 バイトです。This is 900 bytes.

テーブルは、任意の数を持つことができます sql_variant 列です。A table can have any number of sql_variant columns.

sql_variant CONTAINSTABLE と FREETEXTTABLE では使用できません。sql_variant cannot be used in CONTAINSTABLE and FREETEXTTABLE.

ODBC でサポートされていません sql_variantです。ODBC does not fully support sql_variant. クエリではそのため、 sql_variant Microsoft OLE DB Provider for ODBC (MSDASQL) を使用すると、列はバイナリ データとして返されます。Therefore, queries of sql_variant columns are returned as binary data when you use Microsoft OLE DB Provider for ODBC (MSDASQL). たとえば、 sql_variant "ps2091 という"文字列データが含まれている列は 0x505332303931 として返されます。For example, a sql_variant column that contains the character string data 'PS2091' is returned as 0x505332303931.

sql_variant 値の比較Comparing sql_variant Values

Sql_variant データ型変換のためには、データ型階層リストの上部に属しています。The sql_variant data type belongs to the top of the data type hierarchy list for conversion. Sql_variant 、比較、 SQL ServerSQL Server データ型階層の順序は、データ型ファミリにグループ化します。For sql_variant comparisons, the SQL ServerSQL Server data type hierarchy order is grouped into data type families.

データ型階層Data type hierarchy データ型ファミリData type family
sql_variantsql_variant sql_variantsql_variant
datetime2datetime2 日付と時刻Date and time
datetimeoffsetdatetimeoffset 日付と時刻Date and time
datetimedatetime 日付と時刻Date and time
smalldatetimesmalldatetime 日付と時刻Date and time
datedate 日付と時刻Date and time
timetime 日付と時刻Date and time
floatfloat 概数値Approximate numeric
realreal 概数値Approximate numeric
decimaldecimal 正確な数値Exact numeric
moneymoney 正確な数値Exact numeric
smallmoneysmallmoney 正確な数値Exact numeric
bigintbigint 正確な数値Exact numeric
intint 正確な数値Exact numeric
smallintsmallint 正確な数値Exact numeric
tinyinttinyint 正確な数値Exact numeric
bitbit 正確な数値Exact numeric
nvarcharnvarchar UnicodeUnicode
ncharnchar UnicodeUnicode
varcharvarchar UnicodeUnicode
charchar UnicodeUnicode
varbinaryvarbinary BinaryBinary
binarybinary BinaryBinary
uniqueidentifieruniqueidentifier 一意識別子Uniqueidentifier

次の規則が適用 sql_variant 比較します。The following rules apply to sql_variant comparisons:

  • ときに sql_variant 異なる基本データ型の値が比較と基本データ型が、別のデータ型ファミリに、階層グラフでのデータ型ファミリがより高い値は 2 つの値の大きいと見なされます。When sql_variant values of different base data types are compared and the base data types are in different data type families, the value whose data type family is higher in the hierarchy chart is considered the greater of the two values.
  • ときに sql_variant 異なる基本データ型の値が比較し基本データ型が同じデータ型ファミリには、階層グラフで基本データ型が低位の値は、その他のデータ型に暗黙的に変換、および、比較が行われます。When sql_variant values of different base data types are compared and the base data types are in the same data type family, the value whose base data type is lower in the hierarchy chart is implicitly converted to the other data type and the comparison is then made.
  • charvarcharncharnvarchar データ型の sql_variant 値が比較されるとき、LCID、LCID バージョン、比較フラグ、並べ替え ID の各基準に基づいて、値の照合順序がまず比較されます。When sql_variant values of the char, varchar, nchar, or nvarchar data types are compared, their collations are first compared based on the following criteria: LCID, LCID version, comparison flags, and sort ID. これらの各基準は、示された順序に従って、それぞれ整数値として比較されます。Each of these criteria are compared as integer values, and in the order listed. 基準がすべて等しい場合は、照合順序に従って実際の文字列値が比較されます。If all of these criteria are equal, then the actual string values are compared according to the collation.

sql_variant 型データの変換Converting sql_variant Data

処理するときに、 sql_variant データ型の場合は、 SQL ServerSQL Server するには、他のデータ型のオブジェクトの暗黙的な変換をサポートしている、 sql_variant 型です。When handling the sql_variant data type, SQL ServerSQL Server supports implicit conversions of objects with other data types to the sql_variant type. ただし、SQL ServerSQL Server からの暗黙的な変換をサポートしていない sql_variant 別のデータ型のオブジェクトへのデータです。However, SQL ServerSQL Server does not support implicit conversions from sql_variant data to an object with another data type.

制限Restrictions

次の表は、種類の値を使用して格納することはできませんが sql_variant:The following table lists the types of values that cannot be stored by using sql_variant:

varchar(max)varchar(max) varbinary(max)varbinary(max)
nvarchar(max)nvarchar(max) xmlxml
texttext ntextntext
imageimage rowversion (タイムスタンプ)rowversion (timestamp)
sql_variantsql_variant geographygeography
hierarchyidhierarchyid geometrygeometry
ユーザー定義データ型User-defined types datetimeoffset1datetimeoffset1

1 SQL Server 2012 およびそれ以降では、datetimeoffset を制限していません。1 SQL Server 2012 and greater do not restrict datetimeoffset.

使用例Examples

A.A. テーブルで sql_variant を使用するUsing a sql_variant in a table

次の例では、sql_variant データ型でテーブルを作成します。The following example, creates a table with a sql_variant data type. 次の例では、colAcolB =168946279.1 に関する SQL_VARIANT_PROPERTY 情報を取得しています。 tableA には sql_variant 型の colA と、colB が含まれているものとします。Then the example retrieves SQL_VARIANT_PROPERTY information about the colA value 46279.1 where colB =1689, given that tableA has colA that is of type sql_variant and colB.

CREATE   TABLE tableA(colA sql_variant, colB int)  
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)  
SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'  
FROM      tableA  
WHERE      colB = 1689  

以下に結果セットを示します。Here is the result set. これら 3 つの値の各ことに注意してください、 sql_variantです。Note that each of these three values is a sql_variant.

Base Type    Precision    Scale  
---------    ---------    -----  
decimal      8           2  
  
(1 row(s) affected)  

B.B. 変数として sql_variant を使用するUsing a sql_variant as a variable

次の例では、sql_variant データ型を使用して変数を作成し、@v1 という名前の変数に関する SQL_VARIANT_PROPERTY情報を取得します。The following example, creates a variable using the sql_variant data type, and then retrieves SQL_VARIANT_PROPERTY information about a variable named @v1.

DECLARE @v1 sql_variant;  
SET @v1 = 'ABC';  
SELECT @v1;  
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');  
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');  

参照See also

CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)SQL_VARIANT_PROPERTY (Transact-SQL)