我正在尝试从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>
然而,我无法让它发挥作用。有什么我想念的吗?任何和所有的帮助将不胜感激!
答案 0 :(得分: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>