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


Новые возможности в 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 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) с помощью распространяемого пакета установщика. Один из способов установки нескольких пакетов в одном (с точки зрения пользователя) сеансе установки состоит в применении технологии построителей цепочек и загрузчиков. Для получения более подробной информации см. следующие статьи: "Создание пользовательского пакета Bootstrapper для 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 Native Client, если вы используете его в качестве поставщика данных в вашем приложении. Дополнительные сведения см. в статье Установка SQL Server Native Client.

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

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

SQL Server Native Client — это технология доступа к данным, представленная в SQL Server 2005. Она объединяет поставщика 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 представлен xml тип данных, а SQLXML 4.0 поддерживает xml тип данных. Дополнительные сведения см. в разделе "Поддержка типов данных XML" в SQLXML 4.0.

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

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

Изменения в массовой загрузке XML для SQLXML 4.0 SP1

  • Для 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, пробельные символы (LF, CR и табуляция) в XML возвращаются в закодированном виде в случае значений атрибутов. Для значений элементов возвращается закодированным только символ возврата каретки (CR).

    Рассмотрим пример.

    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, такие как тип данных XML или определяемые пользователем типы данных (UDTs) и веб-доступ, вам потребуется использовать другое решение, например управляемые классы SQLXML или другой тип обработчика HTTP, например собственные веб-службы XML для SQL Server 2005.

Кроме того, если эти расширения не требуются, можно продолжать использовать SQLXML 3.0 для подключения к установкам SQL Server 2005 и SQL Server 2008. Поддержка ISAPI SQLXML 3.0 будет работать с этими более поздними версиями, но не поддерживает или не распознает xml тип данных или UDT, представленную в 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.