Новые возможности в 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.