Sdílet prostřednictvím


Identifikace klíčových sloupců pomocí sql:key-fields (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Když je dotaz XPath zadán proti XSD schématu, jsou ve většině případů vyžadovány klíčové informace pro správné vnoření ve výsledku. Specifikace anotace sql:key-fields je způsob, jak zajistit vytvoření odpovídající hierarchie.

Poznámka:

Pro zajištění správného vnoření se doporučuje specifikovat sql:key-fields pro prvky, které mapují na tabulky. Vytvořené XML je citlivé na pořadí základní výsledné množiny. Pokud sql:key-fields není specifikováno, XML generovaný nemusí být správně vytvořen.

Hodnota sql:key-fields identifikuje sloupce(y), které jednoznačně identifikují řádky ve vztahu. Pokud je k jednoznačné identifikaci řádku potřeba více než jeden sloupec, hodnoty sloupců jsou ohraničeny mezery.

Musíte použít anotaci sql:key-fields, když prvek obsahuje <vztah> sql:, který je definován mezi tímto prvkem a podřízeným prvkem, ale neposkytuje primární klíč tabulky specifikovaný v nadřazeném prvku.

Examples

Pro vytvoření pracovních vzorků podle následujících příkladů musíte splnit určité požadavky. Pro více informací viz Požadavky na spouštění SQLXML Examples.

A. Vytvoření vhodného vnoření, když <sql:relation> neposkytuje dostatečné informace

Tento příklad ukazuje, kde je třeba specifikovat sql:key-fields .

Zvažte následující schéma. Schéma specifikuje hierarchii mezi <prvky Objednávka> a <Zákazník> , kde je prvek <Objednávka> rodičem a <Zákazník> je potomkem.

Značka <sql:relation> se používá k určení vztahu rodič-dítě. Identifikuje CustomerID v tabulce Sales.SalesOrderHeader jako rodičovský klíč, který odkazuje na potomek CustomerID v tabulce Sales.Customer. Informace uvedené v <sql:relationship> nejsou dostatečné k jednoznačné identifikaci řádků v nadřazené tabulce (Sales.SalesOrderHeader). Proto bez anotace sql:key-fields je generovaná hierarchie nepřesná.

S sql:key-fields specifickými v <Order> anotace jednoznačně identifikuje řádky v nadřazeném (tabulka Sales.SalesOrderHeader) a její podřízené prvky se objevují pod nadřazeným souborem.

Toto je schéma:

<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="OrdCust"  
        parent="Sales.SalesOrderHeader"  
        parent-key="CustomerID"  
        child="Sales.Customer"  
        child-key="CustomerID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"   
               sql:key-fields="SalesOrderID">  
   <xsd:complexType>  
     <xsd:sequence>  
     <xsd:element name="Customer" sql:relation="Sales.Customer"   
                       sql:relationship="OrdCust"  >  
       <xsd:complexType>  
         <xsd:attribute name="CustID" sql:field="CustomerID" />  
         <xsd:attribute name="SoldBy" sql:field="SalesPersonID" />  
       </xsd:complexType>  
     </xsd:element>  
     </xsd:sequence>  
     <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
     <xsd:attribute name= "CustomerID" type="xsd:string" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Pro vytvoření pracovního vzorku tohoto schématu
  1. Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako KeyFields1.xml.

  2. Zkopírujte následující šablonu a vložte ji do textového souboru. Ulož soubor jako KeyFields1T.xml do stejného adresáře, kde jsi uložil KeyFields1.xml. Dotaz XPath v šabloně vrací všechny <prvky objednávky> s CustomerID menším než 3.

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

    Adresářová cesta určená pro mapovací schéma (KeyFields1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\KeyFields1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Pro více informací viz Použití ADO pro provádění dotazů SQLXML.

Toto je množina částečných výsledků:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
    <Order SalesOrderID="43860" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    <Order SalesOrderID="44501" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    <Order SalesOrderID="45283" CustomerID="1">  
       <Customer CustID="1" SoldBy="280"/>  
    </Order>  
    .....  
</ROOT>  

B. Specifikace sql:key-fields pro vytvoření správného vnoření ve výsledku

V následujícím schématu není v sql:relationship> specifikována žádná hierarchie<. Schéma stále vyžaduje specifikaci anotace sql:key-fields pro jednoznačnou identifikaci zaměstnanců v tabulce HumanResources.Employee.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="HumanResources.Employee" sql:key-fields="EmployeeID" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Title">  
          <xsd:complexType>  
            <xsd:simpleContent>  
              <xsd:extension base="xsd:string">  
                 <xsd:attribute name="EmployeeID" type="xsd:integer" />  
              </xsd:extension>  
            </xsd:simpleContent>  
          </xsd:complexType>  
        </xsd:element>  
     </xsd:sequence>  
   </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Pro vytvoření pracovního vzorku tohoto schématu
  1. Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako KeyFields2.xml.

  2. Zkopírujte následující šablonu a vložte ji do textového souboru. Ulož soubor jako KeyFields2T.xml do stejného adresáře, kde jsi uložil KeyFields2.xml. Dotaz XPath v šabloně vrací všechny <prvky HumanResources.Employee> :

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

    Adresářová cesta určená pro mapovací schéma (KeyFields2.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\KeyFields2.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Pro více informací viz Použití ADO pro provádění dotazů SQLXML.

Toto je výsledek:

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