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


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

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

Замечание

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

Важный Чтобы использовать функции FOR XML на стороне клиента с новым xml типом данных, клиенты всегда должны использовать поставщик данных SQL Server Native Client (SQLNCLI11) вместо поставщика SQLOLEDB. SQLNCLI11 является последней версией поставщика SQL Server и полностью понимает типы данных, представленные в SQL Server 2005. Поведение клиентской части FOR XML с поставщиком SQLOLEDB будет рассматривать xml типы данных как строки.

Форматирование 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.
ВЛОЖЕННЫЙ Аналогично режиму FOR XML AUTO на стороне сервера.
Явный Похож на серверный режим FOR XML EXPLICIT.

Замечание

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

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

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

Если на сервере есть хранимые процедуры, возвращающие один набор строк, можно запросить преобразование FOR XML на стороне клиента, чтобы создать 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, xml-шаблон в SQL Server был улучшен с добавлением атрибута xml на стороне клиента . Если для этого атрибута задано значение true, XML форматируется на клиенте. Обратите внимание, что этот атрибут шаблона идентичен функциям свойства ClientSideXML, зависящее от поставщика SQLXML.

Замечание

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

См. также

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