どのようにXMLクエリの使用して、同一の子ノードとしてSQL Serverの2005/2008列を返すには?
-
22-09-2019 - |
質問
基本的に私は、次のXML形式でSQL Serverのテーブルからいくつかのデータを返す必要があります:
<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>
しかし、私はそれ以上を得ませんでした。ありがとう!
解決 2
あなたは非常に多くのロブをありがとうございました!あなたは間違いなくあなたのために、右のトラックに+1を私を得ました!私は、そうでない場合はSQLサーバが文句を言い、声明SELECT * FROMのすべてをラップする必要がありました。ここでは、最終的な作業クエリがあります:
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')
他のヒント
あなたはあなたのデータをアンピボットする必要があります。
の線に沿って、サブクエリを使用してみてください
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')
所属していません StackOverflow