2

我正在尝试从 SQL 表中检索数据作为 XML。考虑下表:

                  Customers      
Id      Last      First      Phone1      Phone2  
10      Doe       John      555-2121    555-6145
33     Smith      Sally     555-3333    555-7000

我想使用 SQL 中的 FOR XML 子句检索 Last、First、Phone1 和 Phone2 字段。但是,我想检索具有“晚上”属性的 Phone2 字段。例如,我希望 XML 看起来像:

<Customers>   
  <Customer>
        <Last>Doe</Last>
        <First>John</First>
        <Phone Type="Daytime">555-2121</Phone>
        <Phone Type="Evening">555-6145</Phone>   
  </Customer> 
</Customers>  

但是,我无法让它工作。有什么我想念的吗?任何和所有的帮助将不胜感激!

4

1 回答 1

3

您可以在子查询中构建节点。如果您指定for xml type,子查询将与外部查询合并以提供一个 XML:

select  Last as [Last]
,       First as [First]
,       (
        select  'Daytime' as [@Type]
        ,       Phone1 as [*]
        for xml path('Phone'), type
        )
,       (
        select  'Evening' as [@Type]
        ,       Phone2 as [*]
        for xml path('Phone'), type
        )
from    Customers
for xml path('Customer'), root('Customers')

这打印:

<Customers>
    <Customer>
        <Last>Doe</Last>
        <First>John</First>
        <Phone Type="Daytime">555-2121</Phone>
        <Phone Type="Evening">555-6145</Phone>
    </Customer>
    <Customer>
        <Last>Smith</Last>
        <First>Sally</First>
        <Phone Type="Daytime">555-3333</Phone>
        <Phone Type="Evening">555-7000</Phone>
    </Customer>
</Customers>

SQL Fiddle 上的实时示例。

于 2012-06-25T19:16:46.187 回答