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

深入理解 SQL Server XML 視圖中的 ID、IDREF 與 IDREFS 屬性

     編輯:關於SqlServer

什麼是 XML 視圖?

XML 視圖透過對 XML Schema(XSD)添加註釋,將關聯式資料庫的資料子集映射為虛擬 XML 文件。這使得可以使用 XPath 查詢直接獲取 XML 格式結果。

ID/IDREF/IDREFS 的作用

  • ID:元素的唯一識別碼,類似資料庫主鍵,文件範圍內唯一。
  • IDREF:引用另一個元素的 ID,建立一對一關係,類似外鍵。
  • IDREFS:包含多個 IDREF 值(空格分隔),建立一對多關係。

善用這三種屬性可避免 XML 輸出中重複的巢狀資料,大幅減小結果體積。

NCName 限制與前綴註釋

ID 值必須符合 XML NCName 規範:以字母或底線開頭,後接字母、數字、連字號、底線或點。資料庫主鍵常為純數字,不符合規範;且不同表主鍵值可能重複(如 OrderID=1, ProductID=1)。

解決方法:在映射 Schema 中使用 sql:prefix 註釋,為 ID/IDREF/IDREFS 指定前綴字串(如 ORD-, PROD-),確保唯一性與合規性。

實戰範例:Northwind 訂單與產品

<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="root" sql:is-constant="1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Order" maxOccurs="unbounded" sql:relation="Orders">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ShipAddress" sql:field="ShipAddress"/>
              <xsd:element name="ShipCountry" sql:field="ShipCountry"/>
              <xsd:element name="LineItem" maxOccurs="unbounded" sql:relation="[Order Details]" sql:relationship="Order_OrderDetails">
                <xsd:complexType>
                  <xsd:attribute name="ProductID" type="xsd:IDREF" sql:field="ProductID" sql:prefix="PROD-"/>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="OrderID" type="xsd:ID" sql:field="OrderID" sql:prefix="ORD-"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Product" maxOccurs="unbounded" sql:relation="Products">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ProductName" sql:field="ProductName"/>
            </xsd:sequence>
            <xsd:attribute name="ProductID" type="xsd:ID" sql:field="ProductID" sql:prefix="PROD-"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

部署與測試

  1. 在 IIS 建立虛擬目錄(如 Jan2003),啟用 XPath 查詢。
  2. 將 Schema 存為 Orders.xsd 放入虛擬目錄。
  3. 瀏覽器訪問 https://localhost/Jan2003/Orders/Orders.xsd/root 即可獲得含 ID/IDREF 的 XML 結果。

適用場景

  • Schema 需定義 ID/IDREF/IDREFS 型別屬性時。
  • 需消除一對多關係中從層重複資料,減小 XML 輸出體積時。

掌握此技術,能讓 SQL Server 輸出更精簡、符合標準的 XML 文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved