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
 
<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 Server 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
17
 
<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é beaucoup de bidouille etc mais j'arrive pas.
Donc je pense me faire un outil avec Delphi qui va me permettre de faire le truc ligne par ligne.
Avant de le faire, avez vous des recommandations à me donner.
Merci

Andry