Генерация XML-документов в SQL


Для создания XML-документов, возвращаемых клиенту, в SQL Server в конце оператора SELECT предусмотрен раздел:

FOR XML {RAW|AUTO|EXPLICIT}

1) Режим RAW (без обработки)

Создается иерархический текст XML, в котором каждая строка возвращаемых данных преобразуется в одну строку с элементом <row .. />. Название поля определяет название атрибута, а значение столбца – значение атрибута. В запросе можно использовать раздел GROUP BY. Режим RAW лучше всего использовать в тех случаях, когда клиент ожидает встретить плоские документы XML и ищет элементы-строки.

Пример:

SELECT Customer.CNum, Orders.ONum FROM Customer INNER JOIN Orders ON Customer.CNum=Orders.CNum ORDER BY Customer.CNum FOR XML RAW

//будет возвращен результат в виде:
row CNum=”2001” ONum=”3003”
row CNum=”2002” ONum=”3009”
row CNum=”2003” ONum=”3005”
row CNum=”2004” ONum=”3007”
row CNum=”2004” ONum=”3010”

2) Режим AUTO (автоматический)

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

Пример:

SELECT Customer.CNum, Orders.ONum FROM Customer INNTER JOIN Orders ON Customer.CNum=Orders.CNum ORDER BY Customer.CNum FOR XML AUTO

//будет возвращен результат в виде:
<Customer CNum=»2001″>
<Orders ONum=»3003″/>
</Customer>
<Customer CNum=»2002″>
<Orders ONum=»3009″/>
</Customer>
<Customer CNum=»2003″>
<Orders ONum=»3005″/>
</Customer>
<Customer CNum=»2004″>
<Orders ONum=»3007″/>
<Orders ONum=»3010″/>
</Customer>

3) Режим EXPLICIT (с явным указанием параметров)

Сложный и гибкий вариант для создания документов. Позволяет формировать документы практически любой формы, но требует запроса, написанного по определенным правилам. Позволяет определить каждый столбец как атрибут или элемент, и даже создавать элементы, не представленные в БД.

Необходимо явным образом определить схему возвращаемого XML. Это производится путем создания виртуальной таблицы, которую SQL Server переводит в XML.

4) Возврат XML-документов

Для возврата XML-документа через ADO предусмотрен потоковый объект Stream. А чтобы извлечь XML-документ из выходного потока и поместить его в строку, можно воспользоваться принадлежащим объекту Stream методом ReadText.

Можно также генерировать XML из SQL Server средствами ADO и с применением шаблонов.

5) Работа с XML-колонками

DECLARE @Data XML
SET @Data=’
CREATE TABLE TabXML/(Col XML)
INSERT TabXML(Col) VALUES (‘’)


Комментарии запрещены.




Статистика