Поделиться через


Поддержка sql_variant для типов даты-времени

В этом разделе описывается поддержка улучшенной функциональности даты и времени типом sql_variant.

Атрибут столбца SQL_CA_SS_VARIANT_TYPE используется для возврата типа данных variant языка C для столбца результатов. В SQL Server 2008 добавлен дополнительный атрибут, SQL_CA_SS_VARIANT_SQL_TYPE, который устанавливает тип SQL для столбца результатов типа variant в дескрипторе строки реализации (IRD). SQL_CA_SS_VARIANT_SQL_TYPE также можно использовать в дескрипторе параметра реализации (IPD), чтобы указать тип SQL для параметра SQL_SS_TIME2 или SQL_SS_TIMESTAMPOFFSET, имеющего тип SQL_C_BINARY C, привязанный к типу SQL_SS_VARIANT.

Новые типы SQL_SS_TIME2 и SQL_SS_TIMESTAMPOFFSET могут устанавливаться с помощью функции SQLColAttribute. SQL_CA_SS_VARIANT_SQL_TYPE может возвращаться функцией SQLGetDescField.

Для столбцов результата драйвер выполняет преобразование из типа variant в типы даты-времени. Дополнительные сведения см. в разделе Преобразования из SQL в C. При привязке к SQL_C_BINARY длина буфера должна быть достаточно большой для размещения структуры, соответствующей типу SQL.

Для параметров SQL_SS_TIME2 и SQL_SS_TIMESTAMPOFFSET драйвер преобразует значения C в значения sql_variant, как описано в приведенной ниже таблице. Если параметр привязан как SQL_C_BINARY, а серверный тип — SQL_SS_VARIANT, то параметр будет рассматриваться как двоичное значение, если только приложение не установило для SQL_CA_SS_VARIANT_SQL_TYPE какой-либо другой тип SQL. В таком случае приоритет имеет SQL_CA_SS_VARIANT_SQL_TYPE; то есть если установлен SQL_CA_SS_VARIANT_SQL_TYPE, он переопределяет поведение по умолчанию — вывод типа SQL для variant из типа C.

Тип C

Тип сервера

Комментарии

SQL_C_CHAR

varchar

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_WCHAR

nvarchar

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_TINYINT

smallint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_STINYINT

smallint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_SHORT

smallint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_SSHORT

smallint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_USHORT

int

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_LONG

int

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_SLONG

int

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_ULONG

bigint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_SBIGINT

bigint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_FLOAT

real

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_DOUBLE

float

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_BIT

bit

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_UTINYINT

tinyint

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_BINARY

varbinary

SQL_CA_SS_VARIANT_SQL_TYPE не установлен.

SQL_C_BINARY

time

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

Масштаб устанавливается в значение SQL_DESC_PRECISION (параметр DecimalDigits функции SQLBindParameter).

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

Масштаб устанавливается в значение SQL_DESC_PRECISION (параметр DecimalDigits функции SQLBindParameter).

SQL_C_TYPE_DATE

date

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_TYPE_TIME

time(0)

Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

SQL_C_TYPE_TIMESTAMP

datetime2

Масштаб устанавливается в значение SQL_DESC_PRECISION (параметр DecimalDigits функции SQLBindParameter).

SQL_C_NUMERIC

decimal

Точность устанавливается согласно SQL_DESC_PRECISION (параметру ColumnSize функции SQLBindParameter).

Число десятичных знаков устанавливается согласно SQL_DESC_SCALE (параметру DecimalDigits функции SQLBindParameter).

См. также

Основные понятия