2012-07-30 17 views
5

würde Ich mag die unten xml zurückzukehren:Wie FOR XML in Unterabfragen zu verwenden?

<ResultDetails> 
<Node1>hello</Node1> 
<Sites> 
<Site><SiteId>1</SiteId></Site> 
<Site><SiteId>2</SiteId></Site> 
</Sites> 
</ResultDetails> 

ich den Code unten geschrieben, aber nicht funktioniert:

SELECT 'hello' AS Node1,  
    (SELECT TOP 2 SiteId 
    FROM [dbo].[Sites] 
     FOR XML PATH('Site')) AS Sites 
FOR XML PATH('ResultDetails') 

aber es gibt:

<ResultDetails> 
    <row> 
    <Node1>hello</Node1> 
    <Sites>&lt;Site&gt;&lt;siteId&gt;102&lt;/siteId&gt;&lt;/Site&gt;&lt;Site&gt;&lt;siteId&gt;1&lt;/siteId&gt;&lt;/Site&gt;</Sites> 
    </row> 
</ResultDetails> 

Welche SQL Soll ich schreiben?

Dank,

Antwort

13

Sie müssen den TYPE Modifikator auf Ihre innere Abfrage hinzuzufügen:

SELECT 
    'hello' AS Node1 
    , (
     SELECT TOP 2 SiteId 
      FROM [dbo].[Sites] 
     FOR XML PATH('Site'), TYPE 
    ) AS Sites 
FOR XML PATH('ResultDetails') 
+0

das ist richtig, danke. –