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