【问题标题】:How to return SQL Server 2005/2008 columns as identical child nodes using FOR XML query?如何使用 FOR XML 查询将 SQL Server 2005/2008 列作为相同的子节点返回?
【发布时间】:2010-01-23 01:54:42
【问题描述】:

基本上我需要从 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>

但我没有更进一步。谢谢!

【问题讨论】:

    标签: sql sql-server sql-server-2005 for-xml


    【解决方案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')
    

    【讨论】:

      【解决方案2】:

      非常感谢罗伯!你肯定让我走上了正确的道路,为你+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')
      

      【讨论】:

        猜你喜欢
        • 2012-06-30
        • 2012-09-23
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多