Поделиться через


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

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

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

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

  • SQLXML 4.0 и MSXML

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

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

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

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

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

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

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

До версии SQL Server 2008 компонент SQLXML 4.0 распространялся с SQL Server и входил в состав установки по умолчанию всех версий SQL Server, за исключением SQL Server Express. Начиная с SQL Server 2008, последняя версия 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 или более поздней установки.

Распространение 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.

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

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

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

Технология собственного клиента SQL Server может применяться для создания новых или усовершенствования существующих приложений, которым требуется доступ к новым функциям SQL Server, которые не поддерживаются SQLOLEDB и SQLODBC в компонентах MDAC и Microsoft Windows. Например, собственный клиент SQL Server необходим для клиентских функций SQLXML, таких как FOR XML, чтобы использовать тип данных 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 появился тип данных xml, и SQLXML 4.0 поддерживает этот тип данных. Дополнительные сведения см. в разделе Поддержка типов данных xml в SQLXML 4.0.

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

В SQL Server 2008 появились типы данных Date, Time, DateTime2 и DateTimeOffset. SQLXML 4.0 с пакетом обновления 1 (SP1) позволяет использовать эти четыре новых типа данных в качестве встроенных скалярных типов в SQL Server 2012 Native Client OLE DB Provider (SQLNCLI10), который поставляется вместе с SQL Server 2012.

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

  • В SQLXML 4.0 поле переполнения SchemaGen создается с помощью типа данных xml. Дополнительные сведения см. в разделе Модель объектов массовой загрузки SQL Server XML.

  • Если ранее были созданы приложения 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). Если такое поведение нежелательно, значение типа DWORD этого раздела реестра должно быть установлено в 0 (значение по умолчанию — 1).

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

    По умолчанию SQLXML возвращает значения идентификатора SQL Server GUID без заключения в фигурные скобки. Если значение идентификатора GUID должно возвращаться с фигурными скобками (например, {some 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 &#x09;. This is a line feed and CR &#x0D;&#x0A; 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 &#x0D;
     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, такие как тип данных xml или определяемые пользователем типы данных и веб-доступ, необходимо использовать другое решение, например управляемые классы SQLXML, или обработчик HTTP другого типа, например собственные XML-веб-службы для SQL Server 2005.

Если же эти расширения типов не требуются, можно по-прежнему подключаться к экземплярам SQL Server 2005 и SQL Server 2008 с помощью SQLXML 3.0. Средства поддержки ISAPI, реализованные в SQLXML 3.0, будут работать с более поздними версиями, но не поддерживают и не распознают тип данных xml и определяемые пользователем типы данных, поддержка которых появилась в SQL Server 2005.

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

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

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

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

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