Как вернуть результат в виде XML?

В MSSQL 2000 можно в запросе указать выражение FOR XML, в результате чего будет возвращена строка, содержащая XML представление выборки. Например, запрос:

SELECT O.OrderID, O.CustomerID, O.OrderDate,
 O.ShipName, O.ShipAddress, O.ShipCity, O.ShipRegion,
 P.ProductName, OD.UnitPrice, OD.Quantity
 FROM Orders O
  INNER JOIN [Order Details] OD ON O.OrderId = OD.OrderId
  INNER JOIN Products P ON OD.ProductId = P.ProductId
WHERE O.OrderId = '10248'
FOR XML AUTO

Вернет результат:

<O OrderID="10248"

  CustomerID="VINET"

  OrderDate="1996-07-04T00:00:00"

  ShipName="Vins et alcools Chevalier"

  ShipAddress="59 rue de l&apos;Abbaye"

  ShipCity="Reims">

  <P ProductName="Queso Cabrales">

  <OD UnitPrice="14.0000" Quantity="12"/>

  </P>

  <P ProductName="Singaporean Hokkien Fried Mee">

  <OD UnitPrice="9.8000" Quantity="10"/>

  </P>

  <P ProductName="Mozzarella di Giovanni">

  <OD UnitPrice="34.8000" Quantity="5"/>

  </P>

</O>

Возможно как автоматическое форматирование XML результатов запроса, так и задание способа форматирования программистом.
Кроме этого возможно использование XML данных в качестве таблицы в запросе. В качестве примера рассмотрим хранимую процедуру, выдающую данные по заранее неизвестному количеству записей. Идентификаторы записей передаются в неё в виде XML-документа

CREATE PROCEDURE XMLParam
 @Ids VARCHAR(8000)
AS
 DECLARE @idoc int
 EXEC sp_xml_preparedocument @idoc OUTPUT, @Ids
 SELECT O.*
  FROM Orders O
  INNER JOIN OPENXML (@idoc, '/ROOT/Ids', 1) WITH (ID INT) AS T ON
 .OrderId = T.Id
 EXEC sp_xml_removedocument @idoc
GO
Вызов этой процедуры выглядит следующим образом:

DECLARE @S VARCHAR(8000)
SET @S = '<ROOT>
<Ids ID="10250"/>
<Ids ID="10257"/>
<Ids ID="10258"/>
</ROOT>'

EXECUTE XMLParam @S

Очевидно, что соответствующая строка параметров может быть легко построена и клиентским приложением.
Тенцер А. Л.
ICQ UIN 15925834
tolik@katren.nsk.ru

Автор: Vit (<a href="http://www.delphist.com" title="www.delphist.com">www.delphist.com</a>, <a href="http://www.drkb.ru" title="www.drkb.ru">www.drkb.ru</a>, <a href="http://www.unihighlighter.com" title="www.unihighlighter.com">www.unihighlighter.com</a>, <a href="http://www.nevzorov.org" title="www.nevzorov.org">www.nevzorov.org</a>)
Select * From MyTable For XML AUTO, ELEMENTS

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...