どのようにXMLクエリの使用して、同一の子ノードとしてSQL Serverの2005/2008列を返すには?

StackOverflow https://stackoverflow.com/questions/2121740

質問

基本的に私は、次の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')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top