SQL FOR XML - вывод данных в виде элементов или атрибутов - PullRequest
21 голосов
/ 29 марта 2012

Я пытаюсь экспортировать некоторые данные из базы данных в определенном формате XML, указанном заказчиком.XML, который я создаю, будет обрабатываться (предположительно XSLT) третьей стороной для получения окончательного результата, но я хочу формализовать свой XML как можно ближе к этому формату.

Клиент запросил данные окаждый продукт выглядит так:

<product id="1234567890123">
    <activeState partNumber="A1234567890" shipmentDate="20110518" />
</product>

Мой существующий SQL-код:

SELECT SerialNo as id, 
    PartNo as partNumber,
    CONVERT(VARCHAR(8), GETDATE(), 112) AS shipmentDate, 
FROM Products
WHERE SerialNo = @SerialNo
FOR XML PATH ('product'), TYPE)

... что дает:

<product>
  <id>100000000458</id>
  <partNumber>10004905892</partNumber>
  <shipmentDate>20120312</shipmentDate>
</product>

Я ожидаю, что это достаточно просточтобы манипулировать этими данными в XSLT, но чисто как интеллектуальное упражнение, я бы хотел посмотреть, как далеко я смогу в SQL.Моей первой целью было просто выразить идентификатор как атрибут продукта, а не как дочерний элемент.Рендеринг элемента activeState я собирался оставить XSLT, но ясно, если я могу помочь им в их пути, почему бы не сделать это ...

Есть предложения?

1 Ответ

35 голосов
/ 29 марта 2012

Используйте @ для создания атрибутов.

select SerialNo as "@id",
       PartNo as "activeState/@partNumber",
       convert(varchar(8), getdate(), 112) as "activeState/@shipmentDate"
from Products
where SerialNo = @SerialNo
for xml path('product')
...