1

基本的に、次の 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>

しかし、私はそれ以上進んでいません。ありがとう!

4

2 に答える 2

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')
于 2010-01-23T02:11:25.167 に答える
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')
于 2010-01-23T02:58:06.187 に答える