Улучшенная работа типа даты-времени с предыдущими версиями SQL Server (ODBC)Enhanced Date and Time Type Behavior with Previous SQL Server Versions (ODBC)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

В этом разделе описывается ожидаемое поведение клиентских приложений, использующих улучшенные функции даты и времени, которые подключаются к SQL ServerSQL Server версий более ранних, чем SQL Server 2008SQL Server 2008, а также в случаях, когда клиентское приложение использует компоненты доступа к данным MDAC, Windows DAC или собственный клиент SQL ServerSQL Server версии более ранней, чем SQL Server 2008SQL Server 2008 для отправки команд на сервер, поддерживающий улучшенные функции даты и времени.This topic describes the expected behavior when a client application that uses enhanced date and time features communicates with a version of SQL ServerSQL Server earlier than SQL Server 2008SQL Server 2008, and when a client application using Microsoft Data Access Components, Windows Data Access Components, or a version of SQL ServerSQL Server Native Client earlier than SQL Server 2008SQL Server 2008 sends commands to a server that supports enhanced date and time features.

Работа в клиентах низкого уровняDown-Level Client Behavior

Клиентские приложения, скомпилированные с помощью собственного клиента SQL ServerSQL Server версии более ранней, чем SQL Server 2008SQL Server 2008, распознают новые типы даты и времени, как столбцы nvarchar.Client applications that were compiled using a version of SQL ServerSQL Server Native Client prior to SQL Server 2008SQL Server 2008 see the new date/time types as nvarchar columns. Содержимое столбца представляет собой литеральное представление, как описано в разделе "форматы данных: строки и литералы" статьи Поддержка типов данных для улучшения даты и времени ODBC.The column contents are the literal representations, as described in "Data Formats: Strings and Literals" section of Data Type Support for ODBC Date and Time Improvements. Размер столбца равен максимальной длине литерала для долей секунды, указываемых с заданной для столбца точностью.The column size is the maximum literal length for the fractional seconds precision specified for the column.

API-интерфейсы каталога возвращают метаданные, согласующиеся с кодом типа данных низкого уровня, полученного клиентом (например, nvarchar) и со связанным представлением низкого уровня (например, с соответствующим форматом литерала).Catalog APIs will return metadata consistent with the down-level data type code returned to the client (for example, nvarchar) and the associated down-level representation (for example, the appropriate literal format). Тем не менее, будет возвращено реальное имя типа данных SQL Server 2008SQL Server 2008.However, the data type name returned will be the real SQL Server 2008SQL Server 2008 type name.

Метаданные инструкции, возвращаемые SQLDescribeCol, SQLDescribeParam, Скжетдескфиелд и SQLColAttribute, будут возвращать метаданные, которые согласуются с типом нижнего уровня во всех отношениях, включая имя типа.Statement metadata returned by SQLDescribeCol, SQLDescribeParam, SQGetDescField, and SQLColAttribute will return metadata that is consistent with the down-level type in all respects, including the type name. Примером такого типа нижнего уровня является nvarchar.An example of such a down-level type is nvarchar.

Если клиентское приложение нижнего уровня выполняется SQL Server 2008SQL Server 2008 на сервере (или более поздней версии), на котором изменения схемы производятся в типах даты и времени, то ожидаемое поведение выглядит следующим образом:When a down-level client application runs against a SQL Server 2008SQL Server 2008 (or later) server on which schema changes to date/time types have been made, the expected behavior is as follows:

Тип SQL Server 2005SQL Server 2005 type SQL Server 2008SQL Server 2008Тип (или более поздних версий)(or later) Type Клиентский тип ODBCODBC client type Преобразование результата (из SQL в C)Result conversion (SQL to C) Преобразование параметров (из C в SQL)Parameter conversion (C to SQL)
DatetimeDatetime ДатаDate SQL_C_TYPE_DATESQL_C_TYPE_DATE ОКOK ОК (1)OK (1)
SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP Поля времени устанавливаются в нули.Time fields set to zero. OK (2)OK (2)

Завершается ошибкой, если значение поля времени не равно нулю.Fails if time field is non-zero. Работает с SQL Server 2005 (9.x)SQL Server 2005 (9.x).Works with SQL Server 2005 (9.x)SQL Server 2005 (9.x).
Time(0)Time(0) SQL_C_TYPE_TIMESQL_C_TYPE_TIME ОКOK ОК (1)OK (1)
SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP Поля даты устанавливаются в текущую дату.Date fields set to current date. OK (2)OK (2)

Дата пропускается.Date ignored. Ошибка, если доли секунды не равны нулю.Fails if fractional seconds are non-zero. Работает с SQL Server 2005 (9.x)SQL Server 2005 (9.x).Works with SQL Server 2005 (9.x)SQL Server 2005 (9.x).
Time(7)Time(7) SQL_C_TIMESQL_C_TIME Сбой-недопустимый литерал времени.Fails - invalid time literal. ОК (1)OK (1)
SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP Сбой-недопустимый литерал времени.Fails - invalid time literal. ОК (1)OK (1)
Datetime2 (3)Datetime2(3) SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP ОКOK ОК (1)OK (1)
Datetime2 (7)Datetime2(7) SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP ОКOK Значение округляется до 1/300 секунды при преобразовании на клиенте.Value will be rounded to 1/300th second by client conversion.
SmalldatetimeSmalldatetime ДатаDate SQL_C_TYPE_DATESQL_C_TYPE_DATE ОКOK ОКOK
SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP Поля времени устанавливаются в нули.Time fields set to zero. OK (2)OK (2)

Завершается ошибкой, если значение поля времени не равно нулю.Fails if time field is non-zero. Работает с SQL Server 2005 (9.x)SQL Server 2005 (9.x).Works with SQL Server 2005 (9.x)SQL Server 2005 (9.x).
Time(0)Time(0) SQL_C_TYPE_TIMESQL_C_TYPE_TIME ОКOK ОКOK
SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP Поля даты устанавливаются в текущую дату.Date fields set to current date. OK (2)OK (2)

Дата пропускается.Date ignored. Ошибка, если доли секунды не равны нулю.Fails if fractional seconds non-zero.

Работает с SQL Server 2005 (9.x)SQL Server 2005 (9.x).Works with SQL Server 2005 (9.x)SQL Server 2005 (9.x).
Datetime2(0)Datetime2(0) SQL_C_TYPE_TIMESTAMPSQL_C_TYPE_TIMESTAMP ОКOK ОКOK

Расшифровка символовKey to Symbols

СимволSymbol ЗначениеMeaning
11 Если код работал в SQL Server 2005 (9.x)SQL Server 2005 (9.x), то он должен работать и с последующими версиями SQL ServerSQL Server.If it worked with SQL Server 2005 (9.x)SQL Server 2005 (9.x) it should continue to work with a more recent version of SQL ServerSQL Server.
22 У приложения, работавшего с SQL Server 2005 (9.x)SQL Server 2005 (9.x), могут возникать ошибки с более поздними версиями SQL ServerSQL Server.An application that worked with SQL Server 2005 (9.x)SQL Server 2005 (9.x) could fail with a more recent version of SQL ServerSQL Server.

Обратите внимание, что рассматриваются только типичные изменения схемы.Note that only common schema changes have been considered. Ниже приводятся типичные изменения.The following are common changes:

  • Использование нового типа, когда логически приложению необходимо только значение даты или времени.Using a new type where logically an application requires only a date or time value. Однако приложение было вынуждено использовать типы datetime или smalldatetime из-за отсутствия отдельных типов для даты и времени.However, the application was forced to use datetime or smalldatetime due to the lack of separate date and time types.

  • Использование нового типа для получения долей секунд c более высокой точностью.Using a new type to gain additional fractional seconds precision or accuracy.

  • Переключение на тип datetime2, поскольку это предпочтительный тип для данных даты и времени.Switching to datetime2 because this is the preferred date and time datatype.

Метаданные столбцов, возвращаемые SQLColumns, SQLProcedureColumns и SQLSpecialColumnsColumn Metadata Returned by SQLColumns, SQLProcedureColumns, and SQLSpecialColumns

Для типов даты-времени возвращаются значения следующих столбцов.The following column values are returned for date/time types:

Тип столбцаColumn Type Датаdate timetime smalldatetimesmalldatetime DATETIMEdatetime datetime2datetime2 datetimeoffsetdatetimeoffset
DATA_TYPEDATA_TYPE SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR
TYPE_NAMETYPE_NAME Датаdate timetime smalldatetimesmalldatetime DATETIMEdatetime datetime2datetime2 datetimeoffsetdatetimeoffset
COLUMN_SIZECOLUMN_SIZE 1010 8, 10.168,10..16 1616 2323 19, 21..2719, 21..27 26, 28..3426, 28..34
BUFFER_LENGTHBUFFER_LENGTH 2020 16, 20.. 3216, 20..32 1616 1616 38, 42.. 5438, 42..54 52, 56.. 6852, 56..68
DECIMAL_DIGITSDECIMAL_DIGITS NULLNULL NULLNULL 00 33 NULLNULL NULLNULL
SQL_DATA_TYPESQL_DATA_TYPE SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR SQL_DATETIMESQL_DATETIME SQL_DATETIMESQL_DATETIME SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR
SQL_DATETIME_SUBSQL_DATETIME_SUB NULLNULL NULLNULL SQL_CODE_TIMESTAMPSQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMPSQL_CODE_TIMESTAMP NULLNULL NULLNULL
CHAR_OCTET_LENGTHCHAR_OCTET_LENGTH NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
SS_DATA_TYPESS_DATA_TYPE 00 00 111111 111111 00 00

SQLSpecialColumns не возвращает SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH или SS_DATA_TYPE.SQLSpecialColumns does not return SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH, or SS_DATA_TYPE.

Метаданные типа данных, возвращенные SQLGetTypeInfoData Type Metadata Returned by SQLGetTypeInfo

Для типов даты-времени возвращаются значения следующих столбцов.The following column values are returned for date/time types:

Тип столбцаColumn Type Датаdate timetime smalldatetimesmalldatetime DATETIMEdatetime datetime2datetime2 datetimeoffsetdatetimeoffset
TYPE_NAMETYPE_NAME Датаdate timetime smalldatetimesmalldatetime DATETIMEdatetime datetime2datetime2 datetimeoffsetdatetimeoffset
DATA_TYPEDATA_TYPE SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR
COLUMN_SIZECOLUMN_SIZE 1010 1616 1616 2323 2727 3434
LITERAL_PREFIXLITERAL_PREFIX '' '' '' '' '' ''
LITERAL_SUFFIXLITERAL_SUFFIX '' '' '' '' '' ''
CREATE_PARAMSCREATE_PARAMS NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
NULLABLENULLABLE SQL_NULLABLESQL_NULLABLE SQL_NULLABLESQL_NULLABLE SQL_NULLABLESQL_NULLABLE SQL_NULLABLESQL_NULLABLE SQL_NULLABLESQL_NULLABLE SQL_NULLABLESQL_NULLABLE
CASE_SENSITIVECASE_SENSITIVE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE
ДОСТУПНЫЙ ДЛЯ ПОИСКАSEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLESQL_PRED_SEARCHABLE
UNSIGNED_ATTRIBUTEUNSIGNED_ATTRIBUTE NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
FXED_PREC_SCALEFXED_PREC_SCALE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE SQL_FALSESQL_FALSE
AUTO_UNIQUE_VALUEAUTO_UNIQUE_VALUE NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
LOCAL_TYPE_NAMELOCAL_TYPE_NAME Датаdate timetime smalldatetimesmalldatetime DATETIMEdatetime datetime2datetime2 datetimeoffsetdatetimeoffset
MINIMUM_SCALEMINIMUM_SCALE NULLNULL NULLNULL 00 33 NULLNULL NULLNULL
MAXIMUM_SCALEMAXIMUM_SCALE NULLNULL NULLNULL 00 33 NULLNULL NULLNULL
SQL_DATA_TYPESQL_DATA_TYPE SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR SQL_DATETIMESQL_DATETIME SQL_DATETIMESQL_DATETIME SQL_WVARCHARSQL_WVARCHAR SQL_WVARCHARSQL_WVARCHAR
SQL_DATETIME_SUBSQL_DATETIME_SUB NULLNULL NULLNULL SQL_CODE_TIMESTAMPSQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMPSQL_CODE_TIMESTAMP NULLNULL NULLNULL
NUM_PREC_RADIXNUM_PREC_RADIX NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
INTERVAL_PRECISIONINTERVAL_PRECISION NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL NULLNULL
USERTYPEUSERTYPE 00 00 1212 2222 00 00

Работа сервера низкого уровняDown-Level Server Behavior

При соединении с экземпляром сервера версии более ранней, чем SQL Server 2008SQL Server 2008, любые попытки использовать новые серверные типы или связанные с ними коды метаданных и поля дескрипторов приводят к возврату ошибки SQL_ERROR.When connected to a server instance of an earlier version that SQL Server 2008SQL Server 2008, any attempt to use the new server types or associated metadata codes and descriptor fields will result in SQL_ERROR being returned. Будет сформирована диагностическая запись с ошибкой SQLSTATE HY004 и сообщением «Недопустимый тип данных SQL для версии сервера при соединении» или с ошибкой 07006 и сообщением «Нарушение атрибута ограниченного типа данных».A diagnostic record will be generated with SQLSTATE HY004 and the message "Invalid SQL data type for server version on connection", or with 07006 and "Restricted data type attribute violation".

См. также:See Also

Улучшения даты и времени (ODBC)Date and Time Improvements (ODBC)