用于原生 XML 支持的目錄視圖
• 目錄視圖的目的是提供與 XML 用法有關的元數據信息。下面討論了其中幾個目錄視圖。
XML 索引
XML 索引項出現在目錄視圖 sys.indexes 中,索引"type"為 3。"name"列包含 XML 索引的名稱。
XML 索引還被記錄在目錄視圖 sys.xml_indexes 中,它包含 sys.indexes 的所有列以及一些對 XML 索引有意義的特殊列。列"secondary_type"中的值 NULL 表示主 XML 索引;值"P"、"R"和"V' "分別代表 PATH、PROPERTY 和 VALUE 輔助 XML 索引。
XML 索引的空間利用率可以在表值函數 sys.fn_indexinfo() 中找到。該函數會提供許多信息,例如,所占用的磁盤頁數、平均行大小(字節)、記錄數以及所有索引類型(包括 XML 索引)的其他信息。對于每個數據庫分區都會提供這些信息;XML 索引使用基表的相同分區方案和分區函數。
示例:XML 索引的空間利用率
|
這會產生表 T 中的 XML 索引 idx_xCol_Path 在所有分區中占用的磁盤頁數。如果不使用 sum() 函數,結果將返回每個分區的磁盤頁利用率。
檢索 XML 架構集合
XML 架構集合在目錄視圖 sys.xml_schema_collections 中被枚舉。XML 架構集合"sys"由系統定義,它包含無須顯式加載就可在所有用戶定義的 XML 架構集合中使用的預定義命名空間。該列表包含 xml、xs、xsi、fn 和 xdt 的命名空間。其他兩個值得一提的目錄視圖是:sys.xml_schema_namespaces,它枚舉了每個 XML 架構集合中的所有命名空間;sys.xml_components,它枚舉了每個 XML 架構中的所有 XML 架構組件。
內置的函數 XML_SCHEMA_NAMESPACE(schemaName, XmlSchemacollectionName, namespace-uri) 可產生一個 XML 數據類型實例,該實例包含 XML 架構集合中所含架構(預定義的 XML 架構除外)的 XML 架構片段。
可以用下列方式來枚舉 XML 架構集合的內容:
• 在 XML 架構集合的適當目錄視圖上編寫 T-SQL 查詢。
• 使用內置函數 XML_SCHEMA_NAMESPACE()。可以在該函數的輸出上應用 XML 數據類型方法。然而,您無法修改基礎 XML 架構。
• 下面的示例闡述了這些概念。
示例:枚舉 XML 架構集合中的 XML 命名空間
對于 XML 架構集合"myCollection"使用以下查詢:
|
示例:枚舉 XML 架構集合的內容
下面的語句枚舉了關系架構 dbo 中的 XML 架構集合"myCollection"的內容。
|
通過將目標命名空間指定為 XML_SCHEMA_NAMESPACE() 的第三個參數,可以按 XML 數據類型實例的形式獲取該集合中的單獨 XML 架構,如下所示。
示例:輸出 XML 架構集合中的指定架構
下面的語句從關系架構 dbo 中的 XML 架構集合"myCollection"中輸出目標命名空間為"http://www.microsoft.com/books"的 XML 架構。
|
查詢 XML 架構
如果您需要查詢已經加載到 XML 架構集合中的 XML 架構,可以采用下列方式:
• 在 XML 架構命名空間的目錄視圖上編寫 T-SQL 查詢。
• 除了將 XML 架構加載到 XML 類型系統中以外,創建一個包含 XML 數據類型列的表來存儲 XML 架構。您可以使用 XML 數據類型方法來查詢 XML 列。而且,您可以在該列上生成 XML 索引。然而,需要由應用程序來維護存儲在 XML 列中的 XML 架構與存儲在 XML 類型系統中的 XML 架構之間的一致性。例如,如果您從 XML 類型系統中刪除了 XML 架構命名空間,則還必須從表中刪除該命名空間以保持一致性。
(T114)