Генерация 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 (‘’)