由於XML本身的諸多優點,XML技術已被廣泛的使用,目前的好多軟件技術同XML緊密相關,比如微軟的。net 平台對xml提供了強大的支持,提供System.Xml以及其子命名空間下的類型來操作XML.Ado.Net通過核心類型DataSet出色的把關系型數據庫同xml進行了緊密集成。由於平常許多開發人員使用。net 來操作SQL Server的到數據集後再轉換成xml,所以往往忽略Transact-SQL查詢生成XML數據的強大功能。對於一些項目使用XML查詢直接通過SQL生成XML會來的更為簡便,所以我通過在實際項目中的使用和查閱一些資料寫成一個知識點,一是溫故而知新,二是對於一些開發者剛好需要這方面的技術而還沒有找到比較快捷的學習方式提供一條途徑。
在SQL Server 2000中查詢生成XML的語法表達式比較簡潔,整個語法如下:
SELECT <;select_list>
FROM <;table_source>
WHERE <;search_condition>
FOR XML AUTO | RAW | EXPLICIT [,XMLDATA ] [,ELEMENTS] [,BINARY BASE64]
下面我將以Northwind數據庫來演示上面的表達式中所包含的各項功能,下面的查詢語句和返回結果都通過SQL Server 2000查詢分析器來執行和得到。
一。 使用AUTO模式 該模式我認為在生成單表XML數據方面是用得最多的,能滿足一般的需要。先來看他的簡單查詢。
1.簡單查詢
查詢語句:
SELECT CategoryID,
CategoryName
FROM CategorIEs
WHERE CategoryID <; 3 FOR XML AUTO
返回結果:
<;CategorIEs CategoryID="1" CategoryName="Beverages"/>
<;CategorIEs CategoryID="2" CategoryName="Condiments"/>
也可以使用別名,
查詢語句:
SELECT CategoryID AS ID,
CategoryName,
GetDate() as CurrDate
FROM CategorIEs MyTable
WHERE CategoryID <; 3 FOR XML AUTO
返回結果:
<;MyTable ID="1" CategoryName="Beverages" CurrDate="2005-06-24T11:09:52.937"/>
<;MyTable ID="2" CategoryName="Condiments" CurrDate="2005-06-24T11:09:52.937"/>
2.連接查詢
以兩個表為例,
查詢語句:
SELECT CategorIEs.CategoryID,
CategorIEs.CategoryName,
ProductID,
ProductName
FROM CategorIEs
JOIN Products ON CategorIEs.CategoryID = Products.CategoryID AND ProductID <;5
WHERE CategorIEs.CategoryID <; 3 FOR XML AUTO
返回結果:
<;CategorIEs CategoryID="1" CategoryName="Beverages">
<;Products ProductID="1" ProductName="Chai"/>
<;/CategorIEs>
<;CategorIEs CategoryID="2" CategoryName="Condiments"