我正在尝试从 2005 和 2008R2 SQL Server 获取一些以 XML 格式返回的数据。我有两张桌子 - 一张主人和一张细节。我希望 XML 提供主信息以及查询的每个主记录的详细信息(如果存在)。如果不存在详细信息,它应该返回一个空节点而不是什么。例如,当存在详细记录时,我想要这个:
<masters>
<master>
<flda>value</flda>
<fldb>value</fldb>
<details>
<detail>
<dtla>value</dtla>
</detail>
</details>
</master>
</masters>
当没有详细记录存在时,我想要这个:
<masters>
<master>
<flda>value</flda>
<fldb>value</fldb>
<details />
</master>
</masters>
当有详细记录时,我有以下查询可以正确获取数据,但我不知道如何在缺少详细信息时强制使用空节点:
select m.flda, m.fldb,
(select d.dtla
from detail d
where (d.mastid = m.id)
for xml path('detail'), type) as 'details'
from master m
where (m.id = @id)
for xml path('master'), root('masters');