關於SQL Server 2000對XML支援的一些見解
主要針對"select 欄位1,欄位2,...,欄位n from 表或多表聯集查詢 where 條件 for xml auto"類似語句的討論
本人在使用以上語句產生XML資料時,發現了一些SQL Server 2000產生XML資料的一些規律,給我的感覺是要求太苛刻了,從中也可以看出微軟早期對XML支援的不足.現在就把我的這些體會寫給大家看看,不對不足的地方望大家指出。
XML可以很方便地描述樹型結構資料,相對於關係型資料來說,這方面就有點不足。為此從關係型資料轉換到樹型結構資料就比較麻煩。還好,SQL Server 2000提供了這方面的轉換介面。但想轉換好也是有條件的。
前提:SQL Server 2000已經有描述樹型結構資料的基本表(視圖)[如大學裡的院系班的樹型結構資訊,院資訊一個表、系資訊一個表、班資訊一個表,表之間已經建立了主外鍵關係]
1、要顯示的欄位的位置是有順序的,如要正確顯示院系班的樹型結構關係,轉換SQL語句應該這麼寫:
select 院,系,班 from 院,系,班 where 條件 for xml auto
2、盡量不要對顯示的欄位作任何運算與處理,因為這樣會破壞基本表(視圖)的資料作為某一層資料的約定。
比如對"select 院,系,班 from 院,系,班 where 條件 for xml auto" 語句的“系”欄位作了一些運算與處理後,
則SQL Server 2000無法正確地描述"系"欄位產生XML資料後屬於那一層資料。一般情況下,
SQL Server 2000會把”系“欄位自動加進”院“或”班“一層。這樣就得不到我們想要的結果。
3、多表聯集查詢時,不要有子查詢,因為即使你用了子查詢也是沒用的,
"select 欄位1,欄位2,...,欄位n from 表或多表聯集查詢 where 條件 for xml auto"這樣的轉換語句是只認基本表與視圖的。 別妄想用子查詢實現一些複雜的功能。
以上是自已在使用"select 欄位1,欄位2,...,欄位n from 表或多表聯集查詢 where 條件 for xml auto"語句時的一些體會,胡言亂語了一通。