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

적용 대상: 예SQL Server 예Azure SQL Database 아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 APPLIES 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, binarychar 값을 저장할 수 있습니다.For example, a column defined as sql_variant can store int, binary, and char values.

sql_variant는 최대 8016바이트의 길이를 가질 수 있습니다.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.

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 형식의 열을 포함할 수 있지만 특정 행의 키를 구성하는 데이터 값의 총 길이는 인덱스의 최대 길이(900바이트)보다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. 크면 안 됩니다.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. 따라서 Microsoft OLE DB Provider for ODBC(MSDASQL)를 사용할 때 sql_variant 열을 쿼리하면 이진 데이터로 반환됩니다.Therefore, queries of sql_variant columns are returned as binary data when you use Microsoft OLE DB Provider for ODBC (MSDASQL). 예를 들어 문자열 데이터 'PS2091'를 포함하는 sql_variant 열은 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 유니코드Unicode
ncharnchar 유니코드Unicode
varcharvarchar 유니코드Unicode
charchar 유니코드Unicode
varbinaryvarbinary 이진Binary
binarybinary 이진Binary
uniqueidentifieruniqueidentifier UniqueidentifierUniqueidentifier

sql_variant 비교에는 다음 규칙이 적용됩니다.The following rules apply to sql_variant comparisons:

  • 서로 다른 기본 데이터 형식의 sql_variant 값을 비교할 때 기본 데이터 형식이 서로 다른 데이터 형식 패밀리에 있으면 계층 구조 차트에서 더 높은 데이터 형식 패밀리의 값이 두 값 중 더 큰 것으로 간주됩니다.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.
  • char, varchar, nchar 또는 nvarchar 데이터 형식의 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 Serversql_variant 데이터에서 다른 데이터 형식의 개체로의 암시 적 변환을 지원하지 않습니다.However, SQL ServerSQL Server does not support implicit conversions from sql_variant data to an object with another data type.

RestrictionsRestrictions

다음 표에서는 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(timestamp)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

1.A. 테이블에서 sql_variant 사용Using a sql_variant in a table

다음 예에서는 sql_variant 데이터 형식이 있는 테이블을 만듭니다.The following example, creates a table with a sql_variant data type. 그런 다음, 예제는 tableAsql_variantcolB 유형인 colA가 있는 경우 colB =1689colA46279.1에 대한 SQL_VARIANT_PROPERTY 정보를 검색합니다.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. 이 세 값은 각각 sql_variant입니다.Note that each of these three values is a sql_variant.

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

2.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)