2010-01-23 38 views
1

基本上我需要從一個SQL Server表中下面的XML格式返回一些數據:如何使用FOR XML查詢將SQL Server 2005/2008列作爲相同的子節點返回?

<querydata> 
    <entity name="Person.Contact"> 
    <row> 
     <field name="FirstName">Gustavo</field> 
     <field name="LastName">Achong</field> 
    </row> 
    <row> 
     <field name="FirstName">Catherine</field> 
     <field name="LastName">Abel</field> 
    </row> 
... 
    </entity> 
</querydata> 

我想出了下面的SQL語句:

select 'Person.Contact' as "@name", 
(select FirstName, LastName from Person.Contact for XML path('row'), TYPE) 
for XML path('entity'), root('querydata') 

將會產生這樣的輸出:

<querydata> 
    <entity name="Person.Contact"> 
    <row> 
     <FirstName>Gustavo</FirstName> 
     <LastName>Achong</LastName> 
    </row> 
    <row> 
     <FirstName>Catherine</FirstName> 
     <LastName>Abel</LastName> 
    </row> 
.... 
    </entity> 
</querydata> 

但我沒有得到更多。謝謝!

回答

0

非常感謝羅!你絕對讓我走上正軌,爲你+1!我不得不將所有東西都包裝在SELECT * FROM語句中,否則SQL服務器會抱怨。以下是最後的工作查詢:

SELECT 'Person.Contact' as "@name", 
(SELECT 
    (SELECT * from (SELECT 'FirstName' as [@name], [FirstName] as [*] 
    union all 
    SELECT 'LastName' as [@name], [LastName] as [*]) y 
    for xml path('field'), TYPE) 
from Person.Contact for XML path, TYPE) 
for XML path('entity'), root('querydata') 
1

您需要取消您的數據。

嘗試使用子查詢的線沿線的:

SELECT 'FirstName' as [@name], FirstName as [*] 
union all 
SELECT 'LastName' as [@name], LastName as [*] 
for xml path('field') 

或者沿着這些路線的東西...

我沒有與我的SQL(今天我的iPhone),但我我在想:

select 'Person.Contact' as "@name", 
(select (SELECT 'FirstName' as [@name], FirstName as [*] 
union all 
SELECT 'LastName' as [@name], LastName as [*] 
for xml path('field')) from Person.Contact for XML path('row'), TYPE) 
for XML path('entity'), root('querydata')