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

SQL Server 2008 XML 核心增強:Schema 驗證、XQuery 與 XML DML 全面升級

     編輯:關於SqlServer

2008 三大增強領域

  1. Schema 驗證能力改進:支援 Lax 驗證、完整日期時間時區、Union/List 型別。
  2. XQuery 支援增強:新增函數、改進 FLWOR 表達式效能。
  3. XML DML 插入功能增強:更靈活的 insert、delete、replace value of 操作。

3.1 Lax 驗證模式:彈性處理擴充元素

問題背景

XSD <xs:any> 通配符的 processContents 屬性在 2005 僅支援:

  • strict:必須有 Schema 且驗證通過
  • skip:完全不驗證

缺乏「有 Schema 才驗證,否則略過」的中間選項。

Lax 實作範例

Schema 定義:

<xs:complexType name="Order" mixed="true">
  <xs:sequence>
    <xs:element name="CustomerName"/>
    <xs:element name="OrderTotal"/>
    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

XML 實例:

<Invoice xmlns="https://adventure-works.com/order" 
         xmlns:shp="https://adventure-works.com/shipping">
  <Order>
    <CustomerName>Graeme Malcolm</CustomerName>
    <OrderTotal>299.99</OrderTotal>
    <shp:Delivery>Express</shp:Delivery>  
  </Order>
</Invoice>
  • 若 Schema 集合包含 shp:Delivery 定義 → 驗證其內容。
  • 若 Schema 集合不包含 該元素定義 → 略過驗證,不報錯。

此外,xs:anyType 內容模型現在也正確採用 Lax 處理,符合 XSD 規格。

3.2 完整支援 xs:dateTime、date、time 時區

版本時區處理範例輸入儲存結果
2005強制提供、轉 UTC、不保留2007-12-25T06:00:00-08:002007-12-25T14:00:00Z
2008可選提供、保留原始時區2007-12-25T06:00:00-08:002007-12-25T06:00:00-08:00

優勢:全球化應用無需自行維護時區對應表,資料庫層原生保留使用者原始時間語境。

3.3 Union 與 List 型別支援完善

List 型別範例:尺碼清單

<xs:simpleType name="sizeListType">
  <xs:list>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="S"/>
        <xs:enumeration value="M"/>
        <xs:enumeration value="L"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:list>
</xs:simpleType>

合法 XML:<AvailableSizes>S M L</AvailableSizes>
非法 XML:<AvailableSizes>S XL</AvailableSizes>(XL 不在列舉中)

Union 型別範例:多來源代碼

<xs:simpleType name="codeUnionType">
  <xs:union memberTypes="xs:integer xs:string"/>
</xs:simpleType>

允許數字代碼或字串代碼並存,符合企業整合異質系統的實際需求。

遷移檢查清單

  1. 檢查現有 Schema 集合中 processContents="skip" 的通配符,評估是否改為 "lax" 以獲得部分驗證保護。
  2. 日期時間欄位若業務需保留時區,升級後無需應用層轉換,直接儲存原始值。
  3. 測試 Union/List 型別驗證邏輯,確認錯誤訊息符合預期。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved