說我有這樣的設置:FOR XML EXPLICIT
-- tables
declare @main table (id int, name varchar(20))
declare @subA table (id int, mid int, name varchar(20))
declare @subA1 table (id int, subAid int, name varchar(20))
declare @subA2 table (id int, subAid int, name varchar(20))
declare @subB table (id int, mid int, name varchar(20))
-- sample data
insert @main values (1, 'A')
insert @main values (2, 'B')
insert @SubA values (1, 1, 'A')
insert @SubA values (2, 1, 'B')
insert @SubA values (3, 2, 'C')
insert @SubA1 values (1, 1, 'A')
insert @SubA2 values (1, 2, 'A')
insert @SubB values (1, 1, 'A')
insert @SubB values (2, 1, 'B')
insert @SubB values (3, 2, 'C')
-- results
select m.id, m.name, a.name, a1.name, a2.name, b.name
from @main m
left outer join @SubA a on m.id = a.mid
left outer join @SubA1 a1 on a.id = a1.subAid
left outer join @SubA2 a2 on a.id = a2.subAid
left outer join @SubB b on m.id = b.mid
這將返回:
1 A A A NULL A
1 A A A NULL B
1 A B NULL A A
1 A B NULL A B
2 B C NULL NULL C
如果我使用 「FOR XML AUTO」 然後我得到:
<m id="1" name="A">
<a name="A">
<a1 name="A">
<a2>
<b name="A" />
<b name="B" />
</a2>
</a1>
</a>
<a name="B">
<a1>
<a2 name="A">
<b name="A" />
<b name="B" />
</a2>
</a1>
</a>
</m>
<m id="2" name="B">
<a name="C">
<a1>
<a2>
<b name="C" />
</a2>
</a1>
</a>
</m>
然而,這不是我所需要的。我想展示的是@main是有兩個孩子的主表:@subA和@SubB。 @SubA反過來也有兩個孩子:@ SubA1和@ SubA2,所以我想回去:
<m id="1" name="A">
<a name="A">
<a1 name="A"></a1>
<a2></a2>
</a>
<a name="B">
<a1></a1>
<a2 name="A"></a2>
</a>
<b name="A" />
<b name="B" />
</m>
<m id="2" name="B">
<a name="C">
<a1></a1>
<a2></a2>
</a>
<b name="C" />
</m>
我敢肯定,我將不得不使用「用於XML明確的」,但出來的到目前爲止,我嘗試過的所有嘗試都無法獲得我需要的格式。
任何人都可以顯示一個示例查詢,將返回所需格式的數據?
謝謝, 馬克
您正在使用什麼版本的SQL Server? SQL Server 2005及以上有FOR XML PATH這比EXPLICIT容易得多.... – 2009-12-11 19:19:21
我不能保證它將在2005+盒子上,因爲仍有一些人在2000年運行它,所以它必須適用於這兩個平臺。另外,我不認爲FOR XML PATH會給我產生上面列出的輸出所需的靈活性。雖然我很高興被證明是錯誤的! – ca8msm 2009-12-13 21:53:29