Обновление приложений с переходом от SQL Server 2005 Native Client

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Скачать драйвер OLE DB

В этой статье рассматриваются критические изменения в OLE DB Driver for SQL Server с sql Server Native Client в SQL Server 2005 (9.x).

При обновлении с компонентов доступа к данным MDAC до драйвера OLE DB для SQL Server могут возникнуть определенные изменения в работе. Дополнительные сведения см. в статье Updating an Application to OLE DB Driver for SQL Server from MDAC (Обновление приложения с переходом с MDAC на драйвер OLE DB для SQL Server).

SQL Server Native Client 9.0 поставляется с SQL Server 2005 (9.x). Sql Server Native Client 10.0 поставляется с SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 поставляется с SQL Server 2008 R2 (10.50.x). Sql Server Native Client 11.0 поставляется с SQL Server 2012 (11.x) и SQL Server 2014 (12.x).

Изменено поведение в OLE DB Driver for SQL Server по сравнению с собственным клиентом SQL Server 2005 (9.x) Description
OLE DB дополняет данные только до заданного масштаба. Что касается преобразований, при которых преобразованные данные передаются на сервер, Microsoft OLE DB Driver for SQL Server дополняет данные завершающими нулями только до максимальной длины значений datetime. Собственный клиент SQL Server версии 9.0 дополнял данные до 9 разрядов.
Проверьте DBTYPE_DBTIMESTAMP для ICommandWithParameter::SetParameterInfo. Microsoft OLE DB Driver for SQL Server реализует требование OLE DB для bScale в ICommandWithParameter::SetParameterInfo на задание точности в долях секунды для DBTYPE_DBTIMESTAMP.
Хранимая процедура sp_columns теперь возвращает значение "NO" вместо значения "NO" для столбца IS_NULLABLE. В OLE DB Driver for SQL Server хранимая процедура sp_columns теперь возвращает значение "NO" вместо значения "NO" для столбца IS_NULLABLE.
При выходе значения даты за пределы диапазона теперь происходит возврат другого значения ошибки. Что касается типа datetime, то при выходе даты за пределы диапазона допустимых значений Microsoft OLE DB Driver for SQL Server возвращает номер ошибки, отличный от возвращаемого в предыдущих версиях.

В частности, sql Server Native Client 9.0 вернул 22007 для всех значений вне диапазона год в строковых преобразованиях в datetime, и OLE DB Driver for SQL Server возвращает 22008, когда дата находится в диапазоне, поддерживаемом datetime2, но за пределами диапазона, поддерживаемого datetime или smalldatetime.
В значении datetime усекаются доли секунды, а округление не происходит, если при округлении изменится значение дня. До SQL Server Native Client 10.0 поведение клиента для значений даты и времени , отправляемых серверу, округляет их до ближайшей 1/300 секунды. В OLE DB Driver for SQL Server, в этой ситуации происходит усечение долей секунды, если округление приводит к изменению значения дня.
Возможно усечение секунд в значении datetime. Приложение, созданное с помощью OLE DB Driver for SQL Server, которое подключается к серверу SQL Server 2005, усекает секунды и дробные секунды для части данных, отправляемых на сервер, если привязка к столбцу datetime с идентификатором типа DBTYPE_DBTIMESTAMP (OLE DB) или SQL_TIMESTAMP (ODBC) и масштабом 0.

Например:

Входные данные: 1994-08-21 21:21:36.000

Вставляемые данные: 1994-08-21 21:21:00.000
Преобразование данных OLE DB из типа DBTYPE_DBTIME в DBTYPE_DATE больше не вызывает изменения значения дня. До SQL Server Native Client 10.0, если часть времени DBTYPE_DATE находилась в течение полуночи, код преобразования OLE DB вызвал изменение дня. В OLE DB Driver for SQL Server день не изменяется (доли секунды усекаются, а не округляются).
Изменения преобразования IBCPSession::BCColFmt. В OLE DB Driver for SQL Server при использовании IBCPSession::BCOColFmt для преобразования SQLDATETIME или SQLDATETIME в строковый тип экспортируется дробное значение. Например, при преобразовании типа SQLDATETIME в тип SQLNVARCHARMAX версии до возвращаемого экземпляра SQL Server Native Client 10.0
1989-02-01 00:00:00.
Возвращается драйвер OLE DB для SQL Server
1989-02-01 00:00:00.0000000.
В пользовательских приложениях, в которых используется API BCP, теперь могут обнаруживаться предупреждающие сообщения. API BCP выдает предупреждающее сообщение, если длина данных превышает заданную длину для полей всех типов. Раньше это предупреждение выдавалось только для символьных типов, но не для всех типов.
Вставка пустой строки в объект типа sql_variant, привязанный как тип даты и времени, вызывает ошибку. В SQL Server Native Client 9.0 вставка пустой строки в sql_variant привязанную к типу даты и времени не возникла ошибка. OLE DB Driver for SQL Server в этом случае совершенно обоснованно возвращает ошибку.
SQL Server может возвращать разные результаты при запуске триггера. Изменения, внесенные в SQL Server 2008 (10.0.x), могут привести к тому, что приложение возвращает различные результаты из инструкции, которая вызвала запуск триггера при действии NOCOUNT OFF . В такой ситуации в приложении может возникнуть ошибка. Чтобы устранить эту ошибку, задайте для триггера параметр NOCOUNT ON.

См. также

Драйвер OLE DB для SQL Server