Поддержка 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). |