共用方式為


使用 sql:prefix 建立 Valid ID、IDREF 和 IDREFS 類型屬性 (SQLXML 4.0)

屬性可以指定為 ID 類型屬性。然後可以使用指定為 IDREF 或 IDREFS 的屬性來參考 ID 類型屬性,啟用文件之間的連結。

ID、IDREF 和 IDREFS 會對應至 PK/FK (主索引鍵/外部索引鍵) 在資料庫中的關聯性,但是有一些差異。在 XML 文件中,ID 類型屬性的值必須是相異的。如果您在 XML 文件中有指定為 ID 類型的 CustomerIDOrderID 屬性,這些值必須是相異的。然而在資料庫中,CustomerID 和 OrderID 資料行的值可以相同 (例如,CustomerID = 1 且 OrderID = 1 在資料庫中是有效的)。

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

  • ID 值在 XML 文件中必須是唯一的。

  • 針對每一個 IDREF 和 IDREFS,參考的識別碼值都必須在 XML 文件中。

  • ID、IDREF 和 IDREFS 的值必須是具名 Token (例如,整數值 101 不能是 ID 值)。

  • ID、IDREF 和 IDREFS 類型的屬性不能對應至類型 text、ntext、image 或任何其他二進位資料類型 (例如 timestamp) 的資料行。

如果 XML 文件含有多個識別碼,請使用 sql:prefix 註解來確保值是唯一的。

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

範例

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

A. 指定 ID 和 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. 複製下列範本,並將其貼入文字檔中。將檔案儲存在與 sqlPrefix.xml 相同的目錄中,並儲存為 sqlPrefixT.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>