sql_variant(Transact-SQL)
SQL Server에서 지원하는 여러 가지 데이터 형식의 값을 저장하는 데이터 형식입니다.
구문
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는 최대 8016바이트의 길이를 가질 수 있습니다. 여기에는 기본 유형 정보 및 기본 유형 값이 모두 포함됩니다. 실제 기본 유형 값의 최대 길이는 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 열을 쿼리하면 이진 데이터로 반환됩니다. 예를 들어 문자열 데이터 'PS2091'를 포함하는 sql_variant 열은 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 |
유니코드 |
nchar |
유니코드 |
varchar |
유니코드 |
char |
유니코드 |
varbinary |
이진 |
binary |
이진 |
uniqueidentifier |
Uniqueidentifier |
sql_variant 비교에는 다음 규칙이 적용됩니다.
서로 다른 기본 데이터 형식의 sql_variant 값을 비교할 때 기본 데이터 형식이 서로 다른 데이터 형식 패밀리에 있으면 계층 구조 차트에서 더 높은 데이터 형식 패밀리의 값이 두 값 중 더 큰 것으로 간주됩니다.
서로 다른 기본 데이터 형식의 sql_variant 값을 비교할 때 기본 데이터 형식이 동일한 데이터 형식 패밀리에 있으면 계층 구조 차트에서 더 낮은 기본 데이터 형식의 값이 암시적으로 다른 데이터 형식으로 변환된 다음 비교됩니다.
char, varchar, nchar 또는 nvarchar 데이터 형식의 sql_variant 값을 비교할 때는 해당 데이터 정렬이 먼저 LCID, LCID 버전, 비교 플래그 및 정렬 ID를 기준으로 먼저 비교됩니다. 이러한 조건은 각각 정수 값으로, 그리고 나열된 순서대로 비교됩니다. 이러한 모든 조건이 같다면 실제 문자열 값은 데이터 정렬에 따라 비교됩니다.