Преобразование типов данных (компонент 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 как явно, так и неявно.

В следующих подразделах приведено описание процесса преобразования перечисленных ниже типов данных:

binary и varbinary (Transact-SQL)

datetime2 (Transact-SQL)

Типы money и smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

Типы char и varchar (Transact-SQL)

decimal и numeric (Transact-SQL)

sql_variant (Transact-SQL)

date (Transact-SQL)

Типы данных float и real (Transact-SQL)

time (Transact-SQL)

datetime (Transact-SQL)

int, bigint, smallint и tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

Преобразование типов данных с помощью хранимых процедур 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)

Функции CAST и CONVERT (Transact-SQL)

Типы данных (Transact-SQL)

COLLATE (Transact-SQL)