共用方式為


使用 sql:key-fields 來識別索引鍵資料行 (XDR 結構描述)

重要事項重要事項

這個主題是舊版應用程式的參考。這項功能未來將不會繼續開發,請避免在新的開發工作中使用此功能,而改用註解式 XSD 結構描述建立 XML 檢視。如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>。您可以將現有註解式 XDR 結構描述轉換為 XSD 結構描述。如需詳細資訊,請參閱<將註解式 XDR 結構描述轉換為等效 XSD 結構描述 (SQLXML 4.0)>。

針對 XDR 結構描述指定 XPath 查詢時,在大部分情況下都需要索引鍵資訊,才能在結果中取得正確的巢狀結構。指定 sql:key-fields 註解是確保產生適當階層的方式。

[!附註]

若要在結果中產生正確的巢狀結構,建議要在所有的結構描述中指定 sql:key-fields。

在許多情況下,您必須了解如何唯一識別資料表中的資料列,以便產生適當的 XML 階層。您可以將 sql:key-fields 註解加入至 <element><ElementType>,以便識別可唯一識別資料表中資料列的資料行。

sql:key-fields 的值會識別在 <ElementType> 所指定的關聯中唯一識別資料列的資料行。如果需要多個資料行才能唯一識別某個資料列,這些資料行值就會以空格隔開。

sql:key-fields 註解必須指定在包含子元素和 <sql:relationship> (定義在元素和子元素之間) 的元素中,但是它並不提供指定在父元素中的資料表主索引鍵。

範例

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

A. 當 <sql:relationship> 並未提供足夠的資訊時,產生適當的巢狀結構

這則範例會顯示必須指定 sql:key-fields 的位置。

請考慮下列結構描述。此結構描述會指定 <Order><Customer> 元素之間的階層,其中 <Order> 元素是父代,而 <Customer> 元素是子系。

<sql:relationship> 標記是用來指定父子式關聯性。<sql:relationship> 標記會將 Sales.SalesOrderHeader 資料表中的 CustomerID 識別為 foreign-key,並參考 Sales.Customer 資料表中的 CustomerID 索引鍵。在 <sql:relationship> 中提供的這項資訊不足以唯一識別父資料表 (Sales.SalesOrderHeader) 的資料列。因此,如果沒有 sql:key-fields,所產生的階層就是不正確的。

透過在 <Order> 上指定的 sql:key-fields,此註解就會唯一識別父代 (Sales.SalesOrderHeader 資料表) 中的資料列,而且其子元素會顯示在父代下。

這是結構描述:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" />
    <attribute type="CustomerID" />
  </ElementType>

  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" 
                            sql:key-fields="SalesOrderID" >
    <AttributeType name="SalesOrderID" />
    <AttributeType name="CustomerID" />
 
    <attribute type="SalesOrderID" />
    <attribute type="CustomerID" />
    <element type="Customer" >
             <sql:relationship
                         key-relation="Sales.SalesOrderHeader"
                         key="CustomerID"
                         foreign-relation="Sales.Customer"
                         foreign-key="CustomerID" />
    </element>
     </ElementType>
</Schema>

測試這個結構描述的工作範例

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 KeyFieldsA-Xdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。然後將檔案儲存為 KeyFieldsA-XdrT.xml,並放在儲存 KeyFieldsA-Xdr.xml 的相同目錄中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="KeyFieldsA-Xdr.xml">
        /Order
      </sql:xpath-query>
    </ROOT>
    

    針對對應結構描述 (KeyFieldsA-Xdr.xml) 指定的目錄路徑相對於儲存範本的目錄。您也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\KeyFieldsA-Xdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

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

以下為結果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order SalesOrderID="43659" CustomerID="676">
    <Customer CustomerID="676" /> 
  </Order>
  <Order SalesOrderID="43660" CustomerID="117">
    <Customer CustomerID="117" /> 
  </Order>
  <Order SalesOrderID="43661" CustomerID="442">
    <Customer CustomerID="442" /> 
  </Order>
  ...
</ROOT>

B. 指定 sql:key-fields 在結果中產生適當的巢狀結構

在此結構描述中,沒有任何使用 <sql:relationship> 所指定的階層。此結構描述仍然需要指定 sql:key-fields 註解,才能唯一識別 HumanResources.Employee 資料表中的員工。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
   xmlns:dt="urn:schemas-microsoft-com:datatypes"
   xmlns:sql="urn:schemas-microsoft-com:xml-sql">
   <ElementType name="Title" content="textOnly"  >
      <AttributeType name="BusinessEntityID" />
      <attribute type="BusinessEntityID" />
   </ElementType>

   <ElementType name="HumanResources.Employee" sql:key-fields="BusinessEntityID" >
      <element type="JobTitle" />
   </ElementType>
</Schema>

測試這個結構描述的工作範例

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 KeyFieldsB-Xdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。然後將檔案儲存為 KeyFieldsB-XdrT.xml,並放在儲存 KeyFieldsB-Xdr.xml 的相同目錄中。此範本中的 XPath 查詢會傳回所有 <Order> 元素。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="KeyFieldsB-Xdr.xml">
        /HumanResources.Employee
      </sql:xpath-query>
    </ROOT>
    

    針對對應結構描述 (KeyFieldsB-Xdr.xml) 指定的目錄路徑相對於儲存範本的目錄。您也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\KeyFieldsB-Xdr.xml"
    
  3. 建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。

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

以下為結果集的一部分:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <HumanResources.Employee>
    <Title BusinessEntityID="1">Production Technician - WC60</Title> 
  </HumanResources.Employee>
  <HumanResources.Employee>
    <Title BusinessEntityID="2">Marketing Assistant</Title> 
  </HumanResources.Employee>
  <HumanResources.Employee>
    <Title BusinessEntityID="3">Engineering Manager</Title> 
  </HumanResources.Employee>
   ...
</ROOT>