Форматирование XML на стороне клиента (SQLXML 4.0)
В этом разделе содержатся сведения о форматирование XML на стороне клиента. Форматирование на стороне клиента относится к форматированию XML на среднем уровне.
Примечание |
|---|
В этом разделе содержатся дополнительные сведения об использовании предложения FOR XML на клиентской стороне, и предполагается предварительное знакомство с предложением FOR XML. Дополнительные сведения о предложении FOR XML см. в разделе Создание XML с помощью предложения FOR XML. |
Внимание! Чтобы использовать функциональность FOR XML на клиентской стороне с новым типом данных xml, клиенту следует всегда использовать поставщика данных собственного клиента SQL Server (SQLNCLI10) вместо поставщика SQLOLEDB. SQLNCLI10 — новейшая версия поставщика SQL Server и полностью распознает типы данных, появившиеся в SQL Server 2005. Поведение для клиентской стороны FOR XML с поставщиком SQLOLEDB будет обрабатывать типы данных xml как строки.
Форматирование XML-документов на клиентской стороне
При выполнении клиентским приложением следующего запроса:
SELECT FirstName, LastNameFROM Person.ContactFOR XML RAW
...только этот фрагмент запроса посылается на сервер:
SELECT FirstName, LastNameFROM Person.Contact
Сервер выполняет запрос и возвращает клиенту набор строк (который содержит столбцы FirstName и LastName). Затем средний уровень применяет преобразование FOR XML к набору строк и возвращает XML-форматирование клиенту.
Аналогично, при выполнении запроса XPath, сервер возвращает набор строк клиенту, и преобразование FOR XML EXPLICIT применяется к набору строк на клиенте, создавая желаемое XML-форматирование.
В следующей таблице показывает режимы, которые можно задать с FOR XML на клиентской стороне.
Режим FOR XML на клиентской стороне |
комментарии; |
|---|---|
RAW |
Выдает одинаковый результат при указании в FOR XML на клиентской стороне или серверной стороне. |
NESTED |
Похож на режим FOR XML AUTO на стороне сервера. |
EXPLICIT |
Похож на режим FOR XML EXPLICIT на серверной стороне. |
Примечание |
|---|
Если указать режим AUTO и запросить XML-форматирование на клиентской стороне, запрос целиком направляется на сервер; то есть XML-форматирование выполняется на сервере. Это сделано для удобства, но обратите внимание, что режим NESTED возвращает имена базовых таблиц как имена элементов формируемом в XML-документе. Для некоторых создаваемых пользователем приложений могут потребоваться имена базовых таблиц. Например, можно выполнить хранимую процедуру и загрузить результирующие данные в Dataset (в платформе 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 GetContactsGOCREATE PROCEDURE GetContactsAS 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>
Поскольку атрибуту client-side-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 был расширен благодаря добавлению атрибута client-side-xml. Если значение атрибута установлено в значение true, XML-форматирование выполняется на клиенте. Обратите внимание, что функциональность этого атрибута шаблона идентична специфичному для поставщика SQLXMLOLEDB свойству ClientSideXML.
Примечание |
|---|
Если выполнить XML-шаблон в приложении ADO, которое использует поставщика SQLXMLOLEDB, и указан как атрибут client-side-xml в шаблоне, так и свойство поставщика ClientSideXML, то приоритет имеет значение, указанное в шаблоне. |
См. также
Примечание