Бөлісу құралы:


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

Область применения: SQL Server База данных SQL Azure

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 Native Client (SNAC) не поставляется с:

  • SQL Server 2022 (16.x) и более поздних версий
  • SQL Server Management Studio 19 и более поздних версий

Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.

Для новых проектов используйте один из следующих драйверов:

Сведения о 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.