Bonjour à tous,
Je dois transformer une requête SQL en XML suivant le modèle ci-après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11

<Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
  <Particulier>
    <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
    <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
    <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
    <Compte Status="00" Numero="XXXXXXXXXXX" CleRib="00" Type="01"></Compte>
    <Compte Status="00" Numero="YYYYYYYYYYY" CleRib="34" Type="02"></Compte>
  </Particulier>
</Entete>
Pour ce faire, j'ai tenté avec SQL Management Studio de reproduire ce format de sortie avec la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT
     BRC.Code AS "@Agence"
    ,CUS.Code AS "@Identite"
    ,FORMAT(CUS.ContactDate, 'ddMMyyyy') AS "@DateRelation"
    ,CUS.LastName AS [Particulier/Information/@Nom]
    ,COALESCE (CUS.FirstName, 'N/A') AS [Particulier/Information/@Prenom]
    ,CUS.Gender AS [Particulier/Information/@Genre]
    ,FORMAT(CUS.BirthDate, 'ddMMyyyy') AS [Particulier/Information/@DateNaissance]
    ,CASE
       WHEN CUS.DocType = 1 THEN '01' 
       WHEN CUS.DocType = 2 THEN '03' 
     END AS [Particulier/PieceIdentite/@Type]
    ,CUS.DocNumber AS [Particulier/PieceIdentite/@Numero]
    ,FORMAT(CUS.DocDate, 'ddMMyyyy') AS [Particulier/PieceIdentite/@Date]
    ,CUS.Address AS [Particulier/Adresse/@Description]
    ,TOW.Code AS [Particulier/Adresse/@Commune]
    ,TOW.PostalCode AS [Particulier/Adresse/@CodePostal]
    ,ACC.Status AS [Particulier/Compte/@Status]
    ,ACC.Number AS [Particulier/Compte/@Numero]
    ,ACC.Rib AS [Particulier/Compte/@CleRib]
    ,ACC.Type AS [Particulier/Compte/@Type]
FROM MyCBS.dbo.Customer CUS 
INNER JOIN MyCBS.dbo.Branch BRC ON BRC.BranchID = CUS.BranchID
INNER JOIN MyCBS.dbo.Account ACC ON ACC.CustomerID = CUS.CustomerID
INNER JOIN MyCBS.dbo.Town TOW ON TOW.PlaceID  = CUS.DocPlaceID 
WHERE CUS.CustomerID = 545875 --- Customer has 2 accounts
ORDER BY CUS.Code
FOR XML PATH ('Entete');
Sauf que il me sort 2 lignes XML au lieu d'une avec les 2 lignes de comptes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
  <Particulier>
    <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
    <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
    <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
    <Compte Status="00" Numero="XXXXXXXXXXX" CleRib="00" Type="01"></Compte>
  </Particulier>
</Entete>
<Entete Agence="0010001" Identite="0000010" DateRelation="10062010">
  <Particulier>
    <Information Nom="DOE" Prenom="John" Genre="M" DatNaissance="11061985" />
    <PieceIdentite TypPiece="01" NumPiece="XXXXXXXXX" DatPiece="17032020" />
    <Adresse Description="15 Rue XXXX" Commune="C1012" CodPostal="888" />
    <Compte Status="00" Numero="YYYYYYYYYYY" CleRib="34" Type="02"></Compte>
  </Particulier>
</Entete>
J'ai tenté de faire avec le Nested Query mais le resultat n'est pas celui escompté.
Si quelqu'un peut m'aider à resoudre ce problème.
Andry