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 не полностью. Поэтому столбцы типа sql_variant, запрашиваемые через поставщик Microsoft OLE DB для ODBC (MSDASQL), возвращаются в виде двоичных данных. Например, столбец типа 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 |
Юникод |
nchar |
Юникод |
varchar |
Юникод |
char |
Юникод |
varbinary |
Двоичный |
binary |
Двоичный |
uniqueidentifier |
Uniqueidentifier |
К сравнениям типов sql_variant применяются следующие правила.
При сравнении значений sql_variant различных базовых типов данных, находящихся в разных семействах типов данных, большим из двух значений считается то, семейство типа данных которого находится выше в иерархии.
При сравнении значений sql_variant различных базовых типов данных, находящихся в одном семействе типов данных, значение, базовый тип данных которого находится ниже в иерархии, неявно приводится к другому типу данных, после чего производится сравнение.
При сравнении значений sql_variant типа данных char, varchar, nchar или nvarchar их параметры сортировки сначала сравниваются на основе следующих критериев: код языка, версия кода языка, флаги сравнения и идентификаторы сортировки. Каждый из этих критериев сравнивается как целочисленное значение в приведенном порядке. Если все эти критерии равны, то сами строковые значения сравниваются в соответствии с параметрами сортировки.
См. также