SQL Server FOR XML ajoutant dans une balise
-
16-09-2019 - |
Question
Alors je tire des données d'un SQL Server 2000 DB puis le convertir en XML en utilisant FOR XML AUTO.
Le XML que je me regarde en arrière comme ça.
<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>
Tout d'abord, en 2000 il n'y a pas de racine ( « tout »), donc est-il possible d'ajouter un nœud racine dans le T-SQL? Aussi, est-il un moyen d'envelopper tous les produits dans une étiquette de produits? Je ne comprends pas pourquoi le XML est retourné sous la forme mauvaise. Je pouvais le réparer un peu si j'étais dans SQL 2005. Malheureusement, je suis coincé avec 2000 pour le moment.
Merci
La solution
Vous pouvez manipuler le XML à votre souhait avec le FOR XML EXPLICIT . Je pense est une façon beaucoup plus complexe que AUTO (ou le chemin de 2k5), mais il fonctionne très bien une fois que vous obtenez va.
Autres conseils
Je sais en 2005 en utilisant emboîtés sélectionne vous permet d'intégrer plusieurs résultats dans une étiquette de base (multiple produit en) avec le SEELECT Ensted être déclaré aussi pour AUTO XML.
Vous pouvez également utiliser cette technique pour envelopper le tout dans une balise racine en utilisant une grande sélection imbriquée.