2005 および 2008R2 SQL Server から XML 形式で返されたデータを取得しようとしています。マスターとディテールの 2 つのテーブルがあります。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');