Как вернуть результат в виде XML? |
Previous Top Next |
В MSSQL 2000 можно в запросе указать выражение FOR XML, в результате чего будет возвращена строка, содержащая XML представление выборки. Например, запрос:
Code: |
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 |
Вернет результат:
Code: |
<O OrderID="10248" CustomerID="VINET" OrderDate="1996-07-04T00:00:00" ShipName="Vins et alcools Chevalier" ShipAddress="59 rue de l'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-документа
Code: |
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 |
Вызов этой процедуры выглядит следующим образом:
Code: |
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
©Drkb::02786
Code: |
Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Select * From MyTable For XML AUTO, ELEMENTS |