2012-03-29 14 views
17

Estoy tratando de exportar algunos datos desde una base de datos en un formato XML particular especificado por el cliente. El XML que produzco será manipulado (presumiblemente por XSLT) por un tercero para producir el resultado final, pero quiero formalizar mi XML lo más cerca posible de ese formato.SQL FOR XML - Salida de datos como Elementos o como Atributos

El cliente ha solicitado datos sobre cada producto así:

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

My SQL existente es:

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

... lo que hace:

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

espero que es bastante fácil manipular estos datos en XSLT, pero puramente como un ejercicio intelectual, me gustaría ver qué tan lejos pude SQL. Mi primera ambición fue simplemente expresar la identificación como un atributo de producto más que como un elemento secundario. La representación del elemento activeState que iba a dejar al XSLT, pero claramente, si puedo ayudarlos en su camino, ¿por qué no hacerlo ...

¿Alguna sugerencia?

Respuesta

27

Usa @ para crear atributos.

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') 
+0

Trabaja a gusto - gracias. – CJM

Cuestiones relacionadas