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

Это раздел описывает, как тип данных sql_variant поддерживает расширенную функциональность даты и времени.

Атрибут столбца SQL_CA_SS_VARIANT_TYPE используется, чтобы возвратить тип C столбца результатов variant. В 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, он переопределяет поведение по умолчанию — вывод типа variant SQL из типа C.

Тип C

Тип сервера

Комментарии

SQL_C_CHAR

varchar

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

SQL_C_WCHAR

nvarcar

Значение 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).

См. также

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