Новые возможности в SQLXML 4.0 с пакетом обновления 1 (SP1)

Область применения:SQL ServerAzure SQL Database

Microsoft SQLXML 4.0 с пакетом обновления 1 (SP1) включает различные обновления и улучшения. В этом разделе содержится описание всех обновлений и предоставляются ссылки на более подробные сведения (если они доступны). SQLXML 4.0 с пакетом обновления 1 (SP1) предоставляет дополнительные улучшения для поддержки новых типов данных, представленных в SQL Server 2008 (10.0.x). В этом разделе рассматриваются следующие вопросы.

  • Установка SQLXML 4.0 с пакетом обновления 1 (SP1)

  • Проблемы параллельной установки

  • SQLXML 4.0 и MSXML

  • Распространение SQLXML 4.0

  • Поддержка собственного клиента SQL Server

  • Поддержка типов данных, появилась в SQL Server 2005 (9.x)

  • Изменения в SQLXML 4.0, относящиеся к массовой загрузке XML

  • Изменения в SQLXML 4.0, относящиеся к разделам реестра

  • Проблемы переноса

Установка SQLXML 4.0 с пакетом обновления 1 (SP1)

До выпуска SQL Server 2008 (10.0.x) SQLXML 4.0 был выпущен с SQL Server и был частью установки по умолчанию всех версий SQL Server, за исключением SQL Server Express. Начиная с SQL Server 2008 (10.0.x), последняя версия SQLXML (SQLXML 4.0 с пакетом обновления 1 (SP1) больше не включена в SQL Server. Чтобы установить SQLXML 4.0 с пакетом обновления 1 (SP1), скачайте его из расположения установки для SQLXML 4.0 с пакетом обновления 1 (SP1).

Файлы SQLXML 4.0 с пакетом обновления 1 (SP1) устанавливаются в следующий каталог:

%PROGRAMFILES%\SQLXML 4.0\

Заметка

Все необходимые настройки реестра для SQLXML 4.0 вносятся в процессе установки.

Чтобы обеспечить эксплуатацию 32-разрядных приложений SQLXML под управлением WOW64 в 64-разрядных операционных системах Windows, запустите 64-разрядный пакет SQLXML 4.0 с пакетом обновления 1 (SP1), имеющий имя sqlxml4.msi, который можно найти в центре загрузки.

Удаление SQLXML 4.0 с пакетом обновления 1 (SP1)

Для SQLXML 3.0 с пакетом обновления 3 (SP3), SQLXML 4.0 и SQLXML 4.0 с пакетом обновления 1 (SP1) применяются общие разделы реестра. При удалении более поздних версий SQLXML на том же компьютере, где установлен SQLXML 3.0 с пакетом обновления 3 (SP3), может потребоваться повторная установка SQLXML 3.0 с пакетом обновления 3 (SP3).

Проблемы параллельной установки

Процесс установки SQLXML 4.0 не удаляет файлы, установленные для прежних версий SQLXML. Поэтому возможно существование DLL-библиотек для нескольких различающихся версиями установок SQLXML на компьютере. Можно запускать установленные экземпляры параллельно. SQLXML 4.0 содержит как независимые от версии, так и зависимые от версии идентификаторы PROGID. Во всех рабочих приложениях должны использоваться зависимые от версии идентификаторы PROGID.

SQLXML 4.0 с пакетом обновления 1 (SP1) и MSXML

SQLXML 4.0 не устанавливает MSXML. SQLXML 4.0 использует MSXML 6.0, который устанавливается в составе установки SQL Server 2005 (9.x) или более поздней версии.

Распространение SQLXML 4.0 с пакетом обновления 1 (SP1)

Предусмотрена возможность распространять SQLXML 4.0 с пакетом обновления 1 (SP1) с помощью распространяемого пакета установщика. Один из способов установки нескольких пакетов в одном (с точки зрения пользователя) сеансе установки состоит в применении технологии построителей цепочек и загрузчиков. Дополнительные сведения см. в статьях Разработка пользовательского пакета загрузчика для Visual Studio 2005 и Добавление настраиваемых необходимых компонентов.

Если приложение планируется использовать на платформе, отличной от той, на которой оно разрабатывалось, можно скачать из центра загрузки Майкрософт версии sqlncli.msi for x64, Itanium и x86.

Существуют также отдельно распространяемые программы установки для MSXML 6.0 (msxml6.msi). Их можно найти на компакт-диске установки SQL Server в следующем расположении:

%CD%\Setup\

Эти установочные файлы можно использовать для установки MSXML 6.0 непосредственно с компакт-диска. Их можно также использовать для свободного распространения MSXML 6.0 и SQLXML 4.0 с пакетом обновления 1 (SP1) вместе с собственными приложениями.

Кроме того, необходимо перераспространить собственный клиент SQL Server, если вы используете его в качестве поставщика данных с приложением. Дополнительные сведения см. в статье Установка SQL Server Native Client.

Поддержка собственного клиента SQL Server

SQLXML 4.0 поддерживает поставщики SQLOLEDB и SQL Server Native Client. Рекомендуется использовать ту же версию поставщика собственных клиентов SQL Server и SQL Server, так как собственный клиент SQL Server разработан для поддержки новых типов данных, которые будут отправляться на сервере, таких как типы данных Date, Time, DateTime2 и dateTimeOffset в SQL Server 2008 (10.0.x) и поддерживаемые собственным клиентом SQL Server.

Заметка

Собственный клиент SQL Server был удален в SQL Server 2022 (16.x).

SQL Server Native Client — это технология доступа к данным, представленная в SQL Server 2005 (9.x). Она объединяет поставщика SQLOLEDB и драйвер SQLODBC в одну собственную динамическую библиотеку (DLL), а также предоставляет новую уникальную функциональность, независимую от компонентов доступа к данным MDAC и отличную от них.

Собственный клиент SQL Server можно использовать для создания новых приложений или улучшения существующих приложений, которые должны использовать преимущества функций, представленных в SQL Server, которые не поддерживаются SQLOLEDB и SQLODBC в MDAC и Microsoft Windows. Например, для клиентских функций SQLXML, таких как FOR XML, требуется собственный клиент SQL Server Для использования типа данных XML . Дополнительные сведения см. в разделе "Форматирование XML на стороне клиента" (SQLXML 4.0), использование ADO для выполнения запросов SQLXML 4.0 и программирования собственного клиента SQL Server.

Заметка

Между SQLXML 4.0 и SQLXML 3.0 нет полной обратной совместимости. В результате устранения некоторых ошибок и других функциональных изменений, особенно прекращения поддержки SQLXML ISAPI, нельзя использовать виртуальные каталоги IIS с SQLXML 4.0. Большинство приложений будут работать с небольшими изменениями, но их необходимо проверить перед запуском в рабочей среде с SQLXML 4.0.

Поддержка типов данных, появившихся в SQL Server 2005 и SQL Server 2008

SQL Server 2005 (9.x) представил тип данных XML , а SQLXML 4.0 поддерживает тип данных XML . Дополнительные сведения см. в разделе "Поддержка типов данных XML" в SQLXML 4.0.

Примеры использования типа данных XML в SQLXML при сопоставлении XML-представлений , массовой загрузки XML или выполнения диаграмм обновления XML см. в примерах, приведенных в следующих разделах.

SQL Server 2008 (10.0.x) представил типы данных Date, Time, DateTime2 и DateTimeOffset . SQLXML 4.0 с пакетом обновления 1 (SP1) включите эти четыре новых типа данных в виде встроенных скалярных типов при использовании с поставщиком OLE DB собственного клиента SQL Server (SQLNCLI11), который поставляется в SQL Server 2012 (11.x).

Внимание

Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server или последний драйвер Microsoft ODBC для SQL Server . Сведения о SQLNCLI, которые поставляется в качестве компонента ядра СУБД SQL Server (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.

Изменения в SQLXML 4.0 с пакетом обновления 1 (SP1), относящиеся к массовой загрузке XML

  • Для SQLXML 4.0 поле переполнения SchemaGen создается с помощью типа данных XML . Дополнительные сведения см. в статье SQL Server XML Bulk Load Object Model.

  • Если вы ранее создали приложения Microsoft Visual Basic и хотите использовать SQLXML 4.0, необходимо повторно компилировать приложение со ссылкой на Xblkld4.dll.

  • Для приложений Visual Basic Scripting Edition необходимо зарегистрировать используемую DLL-библиотеку. В следующем примере, если указаны независимые от версий идентификаторы PROGID, приложение зависит от последней зарегистрированной DLL-библиотеки:

    set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")   
    

    Заметка

    Зависимый от версии идентификатор PROGID — SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.

Изменения в SQLXML 4.0, относящиеся к разделам реестра

В SQLXML 4.0 разделы реестра изменились по сравнению с предшествующими выпусками на следующие:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize

Необходимо изменить настройки, чтобы эти разделы были действительны в SQLXML 4.0.

Кроме того, в SQLXML 4.0 появились следующие разделы реестра:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo

    По умолчанию SQLXML 4.0 возвращает собственные сведения об ошибках, предоставляемые OLE DB и SQL Server вместо высокоуровневой ошибки SQLXML (как и в предыдущих версиях SQLXML). Если такое поведение нежелательно, значение типа DWORD этого раздела реестра должно быть установлено в 0 (значение по умолчанию — 1).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces

    По умолчанию SQLXML возвращает значения идентификатора SQL Server GUID без заключения в фигурные скобки. Если вы хотите, чтобы значение GUID возвращалось с фигурными скобками (например, {некоторые GUID}), значение этого раздела реестра должно иметь значение 1 (по умолчанию — 0).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode

    По умолчанию, когда средство синтаксического анализа XML загружает данные, пробелы нормализуются в соответствии с правилами XML 1.0. Это приводит к потере некоторых пробельных символов в данных. Таким образом, текстовое представление данных может измениться после синтаксического анализа, хотя семантически данные остаются прежними.

    Раздел представлен таким образом, что можно оставить пробельные символы в данных. Если добавить этот раздел реестра и установить его значение равным 0, пробельные символы (возврат каретки, переноса строки и табуляция) в XML-документе возвращаются закодированными для значений атрибутов. Для значений элементов возвращается закодированным только символ возврата каретки.

    Например:

    CREATE TABLE T( Col1 int, Col2 nvarchar(100));  
    GO  
    -- Insert data with tab, line feed and carriage return).  
    INSERT INTO T VALUES (1, 'This is a tab    . This is a line feed and CR   
     more text');  
    GO  
    -- Test this query (without the registry key).  
    SELECT * FROM T   
    FOR XML AUTO;  
    -- This is the result (no encoding of special characters).  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
      <T Col1="1"   
         Col2="This is a tab    . This is a line feed and CR   
     more text"/>  
    </r>  
    -- Now add registry key with value 0 and execute the query again.  
    -- Note the encoding for carriage return, line-feed and tab in the attribute value.  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
      <T Col1="1"   
         Col2="This is a tab    . This is a line feed and CR   
     more text"/>  
    </r>  
    
    -- Update the query and specify ELEMENTS directive  
    SELECT * FROM T  
    FOR XML AUTO, ELEMENTS  
    -- Only the carriage return is returned encoded.  
    <?xml version="1.0" encoding="utf-8" ?>  
    <r>  
       <T>  
          <Col1>1</Col1>  
          <Col2>This is a tab    . This is a line feed and CR   
     more text</Col2>  
       </T>  
    </r>  
    

Проблемы переноса

Ниже перечислены проблемы, которые могут повлиять на перенос прежних приложений SQLXML на SQLXML 4.0.

Запросы ADO и SQLXML 4.0

В предыдущих версиях SQLXML выполнение запросов на основе URL-адресов поддерживалось с помощью виртуальных каталогов IIS и ISAPI-фильтра SQLXML. Для приложений, использующих SQLXML 4.0, эта функция больше не поддерживается.

Вместо этого запросы, шаблоны и диаграммы обновления SQLXML могут выполняться с помощью расширений SQLXML для объектов данных ActiveX (ADO), появившихся в компонентах доступа к данным MDAC 2.6 и более поздних.

Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML 4.0".

Поддержка SQLXML 3.0 ISAPI и новых типов данных в SQL Server 2005

Так как поддержка ISAPI была удалена из SQLXML 4.0, если решение требует расширенных функций ввода данных, представленных в SQL Server 2005 (9.x), таких как тип данных XML или определяемые пользователем типы данных (UDTs) и веб-доступ, вам потребуется использовать другое решение, например управляемые классы SQLXML или другой тип обработчика HTTP, например собственные веб-службы XML для SQL Server 2005.

Кроме того, если эти расширения не требуются, можно продолжать использовать SQLXML 3.0 для подключения к SQL Server 2005 (9.x) и sql Server 2008 (10.0.x). Поддержка ISAPI SQLXML 3.0 будет работать с этими более поздними версиями, но не поддерживает или не распознает тип данных XML или UDT, представленную в SQL Server 2005 (9.x).

Изменения в массовой загрузке XML для временных файлов

Для SQLXML 4.0 и SQL Server разрешения на массовую загрузку XML предоставляются пользователю, выполняющим операцию массовой загрузки. Разрешения на чтение и запись наследуются из файловой системы. В прежних выпусках SQLXML и SQL Server, массовая загрузка XML на основе SQLXML создавала временные файлы, которые не были защищены и могли быть считаны любым пользователем.

Проблемы миграции для FOR XML на клиентской стороне

Из-за изменений в подсистеме выполнения SQL Server может возвращать различные значения в метаданных базовой таблицы, чем возвращать, если запрос FOR XML был выполнен в SQL Server 2000 (8.x). Если это происходит, форматирование результатов запроса FOR XML на стороне клиента будут иными, в зависимости о версии, на которой работал запрос.

Если запрос FOR XML выполняется на стороне клиента с помощью SQLXML 3.0 в столбце типа данных XML , данные в результатах возвращаются в виде полной инициализации строки. В SQLXML 4.0, если в качестве поставщика указан собственный клиент SQL Server (SQLNCLI11), данные будут возвращены в виде XML.