SQL Server FOR XML adicionando em uma tag
-
16-09-2019 - |
Pergunta
Então, eu estou puxando dados de um DB SQL Server 2000, em seguida, convertê-lo para XML usando PARA AUTO XML.
O XML eu voltar esta aparência.
<Order OrderNumber="2000004" DeliveryPickupCharge="5.9900" SalesTaxTotal="0.0000" SubTotal="0.0000" Total="5.9900">
<Customer FirstName="Anthony" LastName="Caporale">
<Product ProductName="Paper Towels">
<OrderItem ItemQuantity="1" ItemPrice="8.5900" Total="8.5900" />
</Product>
<Product ProductName="Bathroom Tissue - Giant Roll">
<OrderItem ItemQuantity="2" ItemPrice="7.1500" Total="14.3000" />
</Product>
<Product ProductName="Napkins - 1-Ply">
<OrderItem ItemQuantity="1" ItemPrice="3.4900" Total="3.4900" />
</Product>
<Product ProductName="Facial Tissues - 2-Ply - White">
<OrderItem ItemQuantity="2" ItemPrice="2.0500" Total="4.1000" />
</Product>
<Product ProductName="Anti-Perspirant & Deodorant - Ultra DryCool Rush">
<OrderItem ItemQuantity="2" ItemPrice="3.5900" Total="7.1800" />
</Product>
<Product ProductName="Flushable Wipes - Fresh Mates Cloths - Refill">
<OrderItem ItemQuantity="2" ItemPrice="2.9500" Total="5.9000" />
</Product>
Em primeiro lugar, em 2000, não há nenhuma Root ( 'o que quer'), então há alguma maneira de adicionar um nó raiz na T-SQL? Além disso, há uma maneira de envolver todos os produtos em uma etiqueta de produtos? Eu não começ completamente por que o XML retornado é de tal forma ruim. Eu poderia consertá-la um pouco, se eu estava em SQL 2005. Infelizmente, eu estou preso a 2000 no momento.
Graças
Solução
Você pode manipular o XML com seu desejo com a FOR XML EXPLICIT de modo. Eu acho é meio caminho mais complexo do que AUTO (ou o 2k5 PATH), mas ele funciona muito bem uma vez que você ir buscá-la.
Outras dicas
Eu sei que em 2005 usando seleciona aninhadas permite embutir vários resultados em uma tag núcleo (produto múltiplo em produtos) com o seelect ensted também ser declarado para AUTO XML.
Você também pode usar esta técnica para tudo o envoltório em uma tag raiz usando um grande SELECT aninhada.