是元素標記)。
TagNumber
是元素的標記號。借助於通用表中的兩個元數據列(Tag 和 Parent),TagNumber用於表示 XML 樹中的 XML 元素嵌套。每個TagNumber都準確對應于一個ElementName。
AttributeName
是 XML 特性的名稱(如果沒有指定Directive)或包含的元素名(如果Directive是 xml、cdata 或 element)。如果指定Directive,則AttributeName可以為空。這種情況下,列中包含的值直接由具有指定ElementName的元素所包含。
Directive
是可選命令。如果沒有指定Directive,則必須指定AttributeName。如果沒有指定AttributeName且沒有指定Directive(如 Customer!1),則表示元素命令(如 Customer!1!!element)且包含數據。
Directive有兩種用途。該選項用於分別使用關鍵字 ID、IDREF 和 IDREFS 對 ID、IDREF 和 IDREFS 進行編碼。還用於表示如何使用關鍵字 hide、element、xml、xmltext 和 cdata 將字符串數據映射到 XML。大多數情況下允許在這些組中組合指令,但是不能在組本身中進行組合。
ID
可將元素特性指定為 ID 類型的特性。然後可以使用 IDREF 和 IDREFS 特性引用它們,以啟用文檔內的鏈結。但是,如果沒有請求 XMLDATA,則此關鍵字無效。
IDREF
指定為 IDREF 的特性可用於引用 ID 類型的特性,以啟用文檔內的鏈結。但是,如果沒有請求 XMLDATA,則此關鍵字無效。
IDREFS
指定為 IDREFS 的特性可用於引用 ID 類型的特性,以啟用文檔內的鏈結。但是,如果沒有請求 XMLDATA,則此關鍵字無效。
hide
不顯示特性。這對於按照不出現在結果中的特性對結果進行排序可能很有用。
element
不生成特性。而是生成具有指定名稱的包含元素(如果沒有指定特性名則直接生成包含元素)。包含數據被編碼為實體(例如,字符 < 變成 <)。該關鍵字可以與 ID、IDREF 或 IDREFS 組合。
xml
除了不進行實體編碼外,該命令與元素命令相同(例如,字符 < 仍是 <)。除了 hide 外,該命令不能與任何其他命令一起使用。
xmltext
列內容應包在單個標記內,以便與文檔的其他部分集成。如果指定了AttributeName,則標記名由指定名稱替換;否則通過將內容放在容器的起始處而不進行實體編碼,將特性追加到包含元素的當前特性列表。含有該命令的列必須是文本類型(varchar、nvarchar、char、nchar、text、ntext)。該命令只能與 hide 一起使用。在提取存儲在列中的溢出數據時該命令很有用。 如果內容不是有效的 XML,則該行為不明確。
cdata
通過用 CDATA 節環繞數據來包含數據。不對內容進行實體編碼。原始數據類型必須是文本類型(varchar、nvarchar、text、ntext)。該命令只能與 hide 一起使用。當使用該命令時,不應指定AttributeName。
2.簡單查詢
在指定數據所在的元素的名稱和標記時必須使用ElementName參數和Tag參數,也就是查詢語句中表中存在的每一個實際的數據列都必須以ElementName!Tag開頭。在沒有指定AttributeName!Directive的情況下以元素值的形式返回。在只查詢一個表的情況下Tag為1,Parent為NULL。
使用EXPLICIT模式來查詢數據我認為使用倒推的方式會比較方便一些,比如我要得到如下結構,
Description
查詢語句:
SELECT 1 AS Tag,NULL AS Parent,
CategoryID AS [Category!1!ID],
CategoryName AS [Category!1!Name],
Description AS [Category!1]
FROM Categories
WHERE categoryID > 6 FOR XML EXPLICIT
返回結果:
Dried fruit and bean curd
Seaweed and fish
當然下面的語句同上面的等效,
SELECT 1 Tag,NULL Parent,
CategoryID [Category!1!ID],
CategoryName [Category!1!Name],
Description [Category!1]
FROM Categories
WHERE categoryID > 6 FOR XML EXPLICIT
2.連接查詢
在EXPLICIT模式下的多表連接查詢可能相對比較複雜些,先來看一個簡單的例子,
查詢語句:
SELECT 1 AS Tag,NULL AS Parent,
Categories.CategoryID AS [Category!1!ID],
Categories.CategoryName AS [Category!1!!element],
ProductID AS [Category!1!ProductID!element],
ProductName AS [Category!1!ProductName!element]
FROM Categories
JOIN Products ON Categories.CategoryID = Products.CategoryID AND ProductID <5
WHERE Categories.CategoryID < 3 FOR XML EXPLICIT
返回結果:
Beverages
1
Chai
Beverages
2
Chang
Condiments
3
Aniseed Syrup
Condiments
4
Chef Anton's Cajun Seasoning
1
2
下一頁>>