首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 XML 進階:PATH 模式、原生 XML 型別與 Schema 驗證實作

     編輯:關於SqlServer

FOR XML PATH:掌控 XML 結構的關鍵

PATH 模式透過別名路徑決定輸出結構:

  • @AttributeName → 屬性
  • ElementName → 子元素
  • Parent/Child → 巢狀階層

範例:產品目錄 XML

SELECT 
    ProductID   AS '@ProductID',
    Name        AS 'Name',
    Color       AS 'Specs/Color',
    Size        AS 'Specs/Size'
FROM Production.Product
FOR XML PATH('Product'), ROOT('Catalog');

輸出:

<Catalog>
  <Product ProductID="1">
    <Name>Widget</Name>
    <Specs>
      <Color>Red</Color>
      <Size>M</Size>
    </Specs>
  </Product>
</Catalog>

原生 xml 資料型別:變數、欄位與參數

變數宣告與賦值

DECLARE @x XML = N'A';
SELECT @x.query('/Root/Item/@id');  -- XQuery 查詢

Schema 集合建立與綁定

-- 1. 建立 Schema 集合
CREATE XML SCHEMA COLLECTION OrderSchema AS
N'

  
    
      
        
        
      
      
    
  
';

-- 2. 建立綁定 Schema 的表
CREATE TABLE Orders(
    OrderID INT PRIMARY KEY,
    OrderData XML(OrderSchema)  -- 類型化 XML 欄位
);

-- 3. 插入驗證
INSERT INTO Orders VALUES (1, N'Acme99.99');  -- 成功
INSERT INTO Orders VALUES (2, N'Beta');  -- 失敗:缺 Total

類型化 XML 的商業價值

  • 資料完整性:資料庫層強制結構驗證,防止應用層寫入髒資料。
  • 查詢優化:查詢優化器利用 Schema 中的型別資訊產生更佳執行計畫。
  • 儲存效率:類型化 XML 採用二進位編碼(Post-Schema-Validation Infoset),比非類型化 XML 節省 30-50% 空間。

XML 索引:加速 XQuery/XPath

-- 主 XML 索引
CREATE PRIMARY XML INDEX PXML_Orders_OrderData ON Orders(OrderData);

-- 次要索引:PATH、VALUE、PROPERTY
CREATE XML INDEX IX_Orders_Path ON Orders(OrderData) USING XML INDEX PXML_Orders_OrderData FOR PATH;
CREATE XML INDEX IX_Orders_Value ON Orders(OrderData) USING XML INDEX PXML_Orders_OrderData FOR VALUE;

主索引將 XML 解析為關聯式資料列集(節點表),次要索引針對路徑、值、屬性建立 B-tree,大幅提升 .exist()、.value()、.query() 效能。

最佳實務摘要

  1. 優先使用 FOR XML PATH 產生可控結構,避免 AUTO 模式的不可預測性。
  2. 關鍵業務資料採用類型化 XML + Schema 集合,將驗證前移至資料庫層。
  3. XML 欄位若頻繁查詢,務必建立主 XML 索引,視查詢模式加建次要索引。
  4. 大型 XML 文件(>1MB)考慮 FILESTREAM 或拆分儲存,避免單一欄位過大影響緩衝池。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved