SQL FOR XML — вывод данных в виде элементов или атрибутов

Я пытаюсь экспортировать некоторые данные из базы данных в определенный формат 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, но ясно, что если я могу им помочь, то почему бы и нет...

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

22
задан CJM 29 March 2012 в 14:33
поделиться