2010-08-09 26 views
1

Nous sommes en train de mettre à jour notre serveur SQL vers 2K8 R2 et la sortie d'une requête FOR XML AUTO a changé.Comment puis-je obtenir SQL Server 2K8 R2 pour renvoyer ce fichier XML sans recourir au mode de compatibilité

La requête délivre en sortie des colonnes de trois tables

Le jeu de résultats renvoie trois rangées dont chaque colonne est identique bar les deux dernières colonnes de la troisième table. les résultats utilisés pour montrer comme ci-dessous

<element1 myval="Test"> 
    <element2 myotherval="atest"> 
     <element3 a="a"/> 
     <element3 a="b"/> 
     <element3 a="c" /> 
    </element2> 
</element1> 

il montre pas

<element1 myval="Test"> 
     <element2 myotherval="atest"> 
      <element3 a="a"/> 
     </element2> 
    </element1> 
    <element1 myval="Test"> 
     <element2 myotherval="atest"> 
      <element3 a="B"/> 
     </element2> 
    </element1> 
    <element1 myval="Test"> 
     <element2 myotherval="atest"> 
      <element3 a="C"/> 
     </element2> 
    </element1> 

J'ai essayé d'utiliser pour XML Path mais il retourne encore 3 instances distinctes de element1 plutôt que de regrouper les données.

Répondre

1

Si vous voulez une sous-arborescence utilisant FOR XML PATH, vous devrez écrire des sous-requêtes pour chaque sous-arborescence. Donc, dans votre cas, vous avez une instruction select parent pour element1, et l'une des colonnes est une sous-requête qui obtient tout ce qui doit être dans element2 (qui à son tour peut également être des sous-requêtes). Si vous utilisez les sous-requêtes et que vous voulez XML retour de ceux-ci, utilisez

POUR XML PATH ('elementN'), TYPE

ou il va échapper au code XML.

+0

Je suppose que je devrais regrouper les champs des doublons alors aussi? –

+0

Probablement, les sous-requêtes sont plus ou moins autonome à cet égard. Cela ne devrait pas poser de problème, grouper par dans la sous-requête. – Rob