Преобразование типов данных (компонент Database Engine)
Преобразование типов данных происходит в следующих случаях:
При перемещении, сравнении или объединении данных одного объекта с данными другого объекта эти данные могут преобразовываться из одного типа в другой.
При передаче в переменную программы данных из результирующего столбца Transact-SQL, кодов возврата или выходных параметров эти данные должны преобразовываться из системного типа данных SQL Server в тип данных переменной.
При взаимных преобразованиях переменных приложения и столбцов результирующих наборов SQL Server, кодов возврата, параметров и маркеров параметров поддерживаемые преобразования типов данных определяются API базы данных.
Явное и неявное преобразование
Преобразование типов данных бывает явным и неявным.
Неявное преобразование скрыто от пользователя. SQL Server автоматически преобразует данные из одного типа в другой. Например, если тип данных smallint сравнивается с типом int, то перед сравнением тип smallint неявно преобразуется в тип int.
GETDATE() выполняет неявное преобразование в стиль даты 0. SYSDATETIME() выполняет неявное преобразование в стиль даты 21.
Явное преобразование выполняется с помощью функций CAST и CONVERT.
Функции CAST и CONVERT преобразуют значение (локальную переменную, столбец или выражение) из одного типа данных в другой. Например, приведенная ниже функция CAST преобразует числовое значение $157.27 в строку символов '157.27':
CAST ( $157.27 AS VARCHAR(10) )
Если программный код Transact-SQL должен соответствовать требованиям ISO, используйте функцию CAST вместо CONVERT. Использование функции CONVERT вместо CAST дает преимущество в дополнительной функциональности.
На следующей иллюстрации показаны все явные и неявные преобразования типов данных, допустимые для системных типов данных SQL Server. Сюда входят типы xml, bigint и sql_variant. При присваивании неявного преобразования из типа sql_variant не происходит, но неявное преобразование к типу sql_variant производится.
Поведение преобразования типов данных
Некоторые виды явного и неявного преобразования типов данных не поддерживаются при преобразовании типа данных одного объекта SQL Server в тип данных другого объекта. Например, значение типа nchar нельзя преобразовать в значение типа image. Тип данных nchar можно преобразовать только в тип данных binary, причем только явно. Неявное преобразование в binary не поддерживается. Однако тип данных nchar можно преобразовать в тип nvarchar как явно, так и неявно.
В следующих подразделах приведено описание процесса преобразования перечисленных ниже типов данных:
Преобразование типов данных с помощью хранимых процедур OLE-автоматизации
Поскольку SQL Server использует типы данных Transact-SQL, а OLE-автоматизация - типы данных Visual Basic, в хранимых процедурах OLE-автоматизации приходится преобразовывать данные, которыми они обмениваются.
В следующей таблице описываются преобразования типов данных SQL Server в типы данных Visual Basic.
Тип данных SQL Server |
Тип данных Visual Basic |
---|---|
char, varchar, text, nvarchar, ntext |
String |
decimal, numeric |
String |
bit |
Boolean |
binary, varbinary, image |
Одномерный массив Byte() |
int |
Long |
smallint |
Integer |
tinyint |
Byte |
float |
Double |
real |
Single |
money, smallmoney |
Currency |
datetime, smalldatetime |
Date |
Все значения NULL |
Тип данных Variant со значением Null |
Все одиночные значения SQL Server преобразуются в одиночные значения Visual Basic, за исключением binary, varbinary и image. В Visual Basic эти значения преобразуются в одномерные массивы Byte(). Этот массив имеет диапазон Byte(от 0 до length1), где length — число байтов в значениях SQL Server binary, varbinary или значениях image.
Ниже приведена таблица преобразования типов данных Visual Basic в типы данных SQL Server.
Тип данных Visual Basic |
Тип данных SQL Server |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double, Single |
float |
Currency |
money |
Date |
datetime |
String длиной 4000 символов или меньше |
varchar/nvarchar |
String длиной более 4000 символов |
text/ntext |
Одномерный массив Byte() размером 8 000 байт или меньше |
varbinary |
Одномерный массив Byte() размером более 8 000 байт |
image |
См. также
Справочник
Хранимые процедуры OLE-автоматизации (Transact-SQL)