2013-07-03 24 views
3

我的查詢構建XML包括子查詢。子記錄應該放入容器元素中。即使沒有子記錄,XML也必須具有容器元素。用於xml路徑的TSQL - 即使子查詢爲空,如何包含子查詢容器元素?

請考慮以下情況。即使沒有子記錄或驗證失敗,也必須存在<Patients>容器元素。

<Hospital> 
    <Patients> 
     <Patient></Patient> 
     <Patient></Patient> 
     <Patient></Patient> 
    </Patients> 
</Hospital> 

我試着用FOR XML PATH幾個不同的方法:

select 
    (
     select 
      PatientFields 
     from 
      PatientTable 
     for xml path('Patient'), root('Patients'), elements xsinil, type 
    ) 
for xml path('Hospital'), elements xsinil, type 

上述方法完全省去了<Patients>元素空集。

下面的代碼包含標籤,但添加了xsi:nil="true"屬性,這也會導致驗證失敗。

select 
    (
     select 
      PatientFields 
     from 
      PatientTable 
     for xml path('Patient'), elements xsinil, type 
    ) Patients 
for xml path('Hospital'), elements xsinil, type 

有什麼辦法來強制容器元素存在嗎?

回答

2
select 
    (
     select 
      'John Doe' 
     where 1 = 0 
     for xml path('Patient'), type 
    ) 
for xml path('Patients'), root('Hospital'), type