Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure 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
Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako KeyFields1.xml.
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"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
Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako KeyFields2.xml.
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"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>