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

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

Атрибут столбца SQL_CA_SS_VARIANT_TYPE используется для получения типа C для столбца результатов variant. SQL Server 2008 (10.0.x) представляет дополнительный атрибут, SQL_CA_SS_VARIANT_SQL_TYPE, который задает тип SQL варианта результирующий столбец в дескрипторе строки реализации (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 целое Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.
SQL_C_LONG целое Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.
SQL_C_SLONG целое Значение 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 с плавающей запятой Значение 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 Время 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 десятичное Точность имеет значение SQL_DESC_PRECISION (параметр ColumnSize SQLBindParameter).

Масштабируемый набор для SQL_DESC_SCALE (параметр DecimalDigits SQLBindParameter).
SQL_C_SS_TIME2 Время Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset Значение SQL_CA_SS_VARIANT_SQL_TYPE не учитывается.

См. также

Улучшения функций даты и времени (ODBC)