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


Форматирование XML на стороне клиента (SQLXML 4.0)

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

В этом разделе содержатся сведения о форматировании XML на стороне клиента. Форматирование на стороне означает форматирование XML на среднем уровне.

Примечание.

В этом разделе содержатся дополнительные сведения об использовании предложения FOR XML на стороне клиента и предполагается предварительное знакомство с предложением FOR XML. Дополнительные сведения о FOR XML см. в разделе "Создание XML с помощью FOR XML".

SQLNCLI11 была первой версией поставщика SQL Server, чтобы полностью понять типы данных, представленные в SQL Server 2005 (9.x). Поведение клиентской части FOR XML с поставщиком SQLOLEDB будет рассматривать типы данных XML как строки.

Внимание

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), см. в этом исключении жизненного цикла поддержки.

Форматирование XML-документов на стороне клиента

Предположим, клиентское приложение выполняет следующий запрос.

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

Только этот фрагмент запроса будет отправлен на сервер.

SELECT FirstName, LastName  
FROM   Person.Contact  

Сервер выполняет запрос и возвращает набор строк (который содержит firstName и LastNamecolumns) клиенту. Затем средний уровень применяет к набору строк преобразование FOR XML и возвращает XML-форматирование клиенту.

Аналогичным образом, при выполнении запроса XPath сервер возвращает клиенту набор строк, а затем к набору строк на стороне клиента применяется преобразование FOR XML EXPLICIT, создавая нужное XML-форматирование.

В следующей таблице приведены режимы, которые могут быть заданы для FOR XML на стороне клиента.

Режим FOR XML на стороне клиента Комментарий
НЕОБРАБОТАННЫЕ Выдает одинаковый результат при указании в FOR XML на стороне клиента или сервера.
NESTED Похож на режим FOR XML AUTO на стороне сервера.
EXPLICIT Похож на режим FOR XML EXPLICIT на стороне сервера.

Примечание.

Если указать режим AUTO и запросить XML-форматирование на стороне клиента, то запрос будет целиком отправлен на сервер, то есть XML-форматирование будет выполняться на сервере. Это сделано для удобства, но обратите внимание, что режим NESTED возвращает имена базовых таблиц в созданном в XML-документе как имена элементов. Для некоторых создаваемых пользователем приложений могут потребоваться имена базовых таблиц. Например, можно выполнить хранимую процедуру и загрузить полученные данные в набор данных (в Microsoft платформа .NET Framework), а затем создать DiffGram для обновления данных в таблицах. В таком случае потребуются сведения о базовой таблице, и поэтому придется использовать режим NESTED.

Преимущества форматирования XML-кода на стороне клиента

Ниже приведены некоторые преимущества форматирования XML-кода на стороне клиента.

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

Например, рассмотрим следующую хранимую процедуру. Она возвращает имена и фамилии сотрудников из таблицы Person.Contact в базе AdventureWorks.

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

Следующий образец XML-шаблона выполняет хранимую процедуру. Предложение FOR XML указывается после имени хранимой процедуры.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Так как атрибут xml на стороне клиента имеет значение 1 (true) в шаблоне, хранимая процедура выполняется на сервере, а набор строк двух столбцов, возвращаемый сервером, преобразуется в XML на среднем уровне и возвращается клиенту. (здесь показан только фрагмент результата).

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Примечание.

При использовании поставщика SQLXMLOLEDB или управляемых классов SQLXML можно использовать свойство ClientSideXml для запроса форматирования XML на стороне клиента.

Рабочая нагрузка лучше сбалансирована

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

Поддержка форматирования XML-кода на стороне клиента

Поддержку форматирования XML-кода на стороне клиента обеспечивают следующие компоненты SQLXML:

  • SQLXMLOLEDB, поставщик

  • управляемые классы SQLXML

  • Улучшенная поддержка XML-шаблонов

  • Свойство SqlXmlCommand.ClientSideXml

    Установив это свойство управляемых классов SQLXML в значение true, можно задать форматирование на стороне клиента.

Улучшенная поддержка XML-шаблонов

Начиная с SQL Server 2005 (9.x), xml-шаблон в SQL Server был улучшен с добавлением атрибута xml на стороне клиента. Если значение этого атрибута установлено в значение true, то XML-форматирование выполняется на стороне клиента. Обратите внимание, что этот атрибут шаблона идентичен функциям свойства ClientSideXML, зависящее от поставщика SQLXML.

Примечание.

Если вы выполняете XML-шаблон в приложении ADO, использующее поставщик SQLXMLOLEDB, и вы указываете атрибут client-side-xml в шаблоне и свойстве ClientSideXML поставщика, значение, указанное в шаблоне, имеет приоритет.

См. также

Архитектура форматирования XML на стороне клиента и сервера (SQLXML 4.0)
FOR XML (SQL Server)
Вопросы безопасности FOR XML (SQLXML 4.0)
Поддержка типов данных XML в SQLXML 4.0
Управляемые классы SQLXML
Форматирование XML на стороне клиента (SQLXML 4.0)
Объект SqlXmlCommand (управляемые классы SQLXML)
XML-данные (SQL Server)