共用方式為


使用 sql:prefix 建立有效的標識符、IDREF 和 IDREFS 類型屬性 (SQLXML 4.0)

適用於:SQL Server Azure SQL 資料庫

屬性可以指定為識別元類型屬性。 然後,指定為IDREF或IDREFS的屬性可用來參考標識元類型屬性,以啟用檔案之間的連結。

標識碼、IDREF 和 IDREFS 對應至資料庫中的 PK/FK(主鍵/外鍵)關聯性,但差異很少。 在 XML 檔中,標識元類型屬性的值必須相異。 如果 CustomerID 和 OrderID 屬性在 XML 檔中指定為識別元類型,這些值必須不同。 不過,在資料庫中,CustomerID 和 OrderID 數據行可以有相同的值。 (例如,CustomerID = 1,OrderID = 1 在資料庫中有效)。

若要讓ID、IDREF和IDREFS屬性有效:

  • 標識碼的值在 XML 檔中必須是唯一的。

  • 針對每個IDREF和IDREFS,參考的標識碼值必須位於 XML 檔中。

  • ID、IDREF 和 IDREFS 的值必須是具名令牌。 (例如,整數值 101 不能是標識符值。

  • ID、IDREF 和 IDREFS 類型的屬性無法對應至類型 text、ntext 或 image 或任何其他二進位資料類型的數據行(例如時間戳)。

如果 XML 檔包含多個識別碼,請使用 sql:prefix 註釋來確保值是唯一的。

請注意, sql:prefix 註釋不能與 XSD 固定屬性搭配使用。

範例

若要使用下列範例建立工作範例,您必須符合特定需求。 如需詳細資訊,請參閱 執行 SQLXML 範例的需求。

A. 指定標識碼和IDREFS類型

在下列架構中,Customer> 元素是由 <Order> 子元素所組成。< <Order> 元素也有子專案 <OrderDetail> 元素。

Customer><OrderIDList 屬性是 IDREFS 類型屬性,該屬性會參考 Order 元素的 <OrderID> 屬性。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustOrders"  
                 parent="Sales.Customer"  
                 parent-key="CustomerID"  
                 child="Sales.SalesOrderHeader"  
                 child-key="CustomerID" />  
    <sql:relationship name="OrderOrderDetail"  
                 parent="Sales.SalesOrderHeader"  
                 parent-key="SalesOrderID"  
                 child="Sales.SalesOrderDetail"  
                 child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"    
               sql:relationship="CustOrders" maxOccurs="unbounded" >  
          <xsd:complexType>  
              <xsd:sequence>  
                <xsd:element name="OrderDetail"   
                             sql:relation="Sales.SalesOrderDetail"   
                   sql:relationship="OrderOrderDetail"   
                   maxOccurs="unbounded" >  
                  <xsd:complexType>  
                   <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
                   <xsd:attribute name="ProductID" type="xsd:string" />  
                   <xsd:attribute name="OrderQty" type="xsd:integer" />  
                  </xsd:complexType>  
               </xsd:element>  
             </xsd:sequence>  
             <xsd:attribute name="SalesOrderID"   
                            type="xsd:ID" sql:prefix="ord-" />  
             <xsd:attribute name="OrderDate" type="xsd:date" />  
             <xsd:attribute name="CustomerID" type="xsd:string" />  
          </xsd:complexType>  
      </xsd:element>  
    </xsd:sequence>  
    <xsd:attribute name="CustomerID" type="xsd:string" />  
    <xsd:attribute name="OrderIDList" type="xsd:IDREFS"   
                   sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID"  
                   sql:relationship="CustOrders" sql:prefix="ord-">  
    </xsd:attribute>  
  </xsd:complexType>  
</xsd:element>  
</xsd:schema>  
若要針對架構測試範例 XPath 查詢
  1. 複製上述架構程序代碼,並將它貼到文本檔中。 將檔案儲存為sqlPrefix.xml。

  2. 複製下列範本,並將它貼到文字檔中。 將檔案儲存為sqlPrefixT.xml儲存sqlPrefix.xml的相同目錄中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="sqlPrefix.xml">  
        /Customer[@CustomerID=1]  
      </sql:xpath-query>  
    </ROOT>  
    

    針對對應架構指定的目錄路徑 (sqlPrefix.xml) 相對於儲存範本的目錄。 您也可以指定絕對路徑,例如:

    mapping-schema="C:\SqlXmlTest\sqlPrefix.xml"  
    
  3. 建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行範本。

    如需詳細資訊,請參閱 使用 ADO 執行 SQLXML 查詢

以下是部份結果:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Customer CustomerID="1" OrderIDList="ord-43860 ord-44501 ord-45283 ord-46042">  
    <Order SalesOrderID="ord-43860" OrderDate="2001-08-01" CustomerID="1">  
      <OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />   
      ...  
    </Order>  
    ...  
 </Customer>  
</ROOT>