2013-03-19 109 views
1

我想從2005和2008R2 SQL Server中獲取以XML格式返回的一些數據。我有兩張桌子 - 一個主人和一個細節。我希望XML給出主信息,並在其中查詢查詢的每個主記錄的詳細信息(如果存在)。如果沒有詳細信息存在,它應該返回一個空節點而不是任何東西。例如,當詳細記錄存在,我想這一點:SQL Server 2008 XML空節點

<masters> 
    <master> 
    <flda>value</flda> 
    <fldb>value</fldb> 
    <details> 
     <detail> 
     <dtla>value</dtla> 
     </detail> 
    </details> 
    </master> 
</masters> 

當NO詳細記錄存在,我想這一點:

<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'); 

回答

3

我從問其他網站上同樣的問題,得到的回答有(http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/Q_28071909.html) 「PortletPaul」。對於那些沒有一個帳戶在那裏,該解決方案是使用ISNULL指令如下:

select m.flda, m.fldb, 
    isnull((select * 
      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'); 

這會給你類似如下:

<masters> 
    <master> 
    <flda>value</flda> 
    <fldb>value</fldb> 
    <details></details> 
    </master> 
</masters> 

這不是我想要的<details />但它的足夠近。