2016-08-05 1 views
3

J'écris une requête pour sélectionner des colonnes au format xml.Sélectionnez les données au format xml en utilisant FOR XML

Exemple

J'ai données comme ci-dessous

Create Table #Master(Id int, Name varchar(100)) 

Insert Into #Master 
Values(1,'Item1'),(2,'Item2') 


Create Table #Sub(SubId int,MasteId int, SubName varchar(100)) 

Insert Into #Sub 
Values(1,1,'SubItem1'),(2,1,'SubItem2') 

Au moment d'écriture requête comme suit

Select * 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL; 

qui tire le xml comme ci-dessous

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Main> 
    <Id>1</Id> 
    <Name>Item1</Name> 
    </Main> 
    <Main> 
    <Id>2</Id> 
    <Name>Item2</Name> 
    </Main> 
</ItemGroup> 

Mais je vouloir utiliser le lien t il #MASTER et #Sub apporter sous point dans la note pour chaque maître point il va générer quelque chose comme ci-dessous

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Main> 
    <Id>1</Id> 
    <Name>Item1</Name> 
    <SubItems> 
     <subitem> 
     <subid>1</subid> 
     <masterid>1</masterid> 
     <subname>SubItem1</subname> 
     </subitem> 
     <subitem> 
     <subid>2</subid> 
     <masterid>1</masterid> 
     <subname>SubItem2</subname> 
     </subitem> 
    </SubItems> 
    </Main> 
    <Main> 
    <Id>2</Id> 
    <Name>Item2</Name> 
    </Main> 
</ItemGroup> 

Est-il possible que je puisse y parvenir?

Répondre

1
SELECT 
    *, 
    (
     SELECT * 
     FROM #Sub AS subitem 
     WHERE subitem.MasteId = Main.Id 
     FOR XML AUTO, ELEMENTS, TYPE 
    ) AS SubItems 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL; 
1

Essayez ceci,

Select *, (Select * 
      From #Sub as s 
      WHERE s.MasteId = Main.Id 
      FOR XML PATH('subitem'), TYPE) SubItems 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL;