Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
gäller för:SQL Server
Azure SQL Database
När en XPath-fråga specificeras mot ett XSD-schema krävs nyckelinformation i de flesta fall för att uppnå korrekt inbäddning i resultatet. Att specificera sql:key-fields-annotationen är ett sätt att säkerställa att rätt hierarki genereras.
Anmärkning
För att säkerställa korrekt inbäddning rekommenderas det att du anger sql:key-fields för element som mappas till tabeller. Den XML som produceras är känslig för ordningen av den underliggande resultatmängden. Om sql:key-fields inte specificeras kan den genererade XML:en vara felaktig i format.
Värdet sql :key-fields identifierar kolumnen/kolumnerna som unikt identifierar raderna i relationen. Om mer än en kolumn krävs för att entydigt identifiera en rad avgränsas kolumnvärdena av mellanslag.
Du måste använda sql:key-fields-annotationen när ett element innehåller en <sql:relation> som definieras mellan elementet och ett barnelement men inte tillhandahåller primärnyckeln för tabellen som anges i föräldraelementet.
Examples
För att skapa arbetsprover med hjälp av följande exempel måste du uppfylla vissa krav. För mer information, se Krav för att köra SQLXML-exempel.
A. Att skapa lämplig inbäddning när <sql:relationship> inte ger tillräcklig information
Detta exempel visar var sql:key-fields måste specificeras.
Betrakta följande schema. Schemat specificerar en hierarki mellan <Order>- och <Customer-elementen> där Order-elementet <> är föräldern och Customer-elementet <> är ett barn.
Taggen< sql:relationship-taggen> används för att specificera förälder-barn-relationen. Den identifierar CustomerID i tabellen Sales.SalesOrderHeader som föräldranyckeln som refererar till CustomerID-barnnyckeln i tabellen Sales.Customer. Informationen som ges i <sql:relationship> är inte tillräcklig för att unikt identifiera rader i modertabellen (Sales.SalesOrderHeader). Därför är den genererade hierarkin utan sql:key-fields-annotationen felaktig.
Med sql:key-fields specificerade i <Order> identifierar annotationen entydigt raderna i föräldern (Sales.SalesOrderHeader-tabellen), och dess underordnade element visas under föräldern.
Detta är schemat:
<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>
För att skapa ett fungerande exempel av detta schema
Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som KeyFields1.xml.
Kopiera följande mall och klistra in den i en textfil. Spara filen som KeyFields1T.xml i samma katalog där du sparade KeyFields1.xml. XPath-frågan i mallen returnerar alla <orderelement> med ett CustomerID mindre än 3.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields1.xml"> /Order[@CustomerID < 3] </sql:xpath-query> </ROOT>Den katalogväg som anges för mappningsschemat (KeyFields1.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:
mapping-schema="C:\MyDir\KeyFields1.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
För mer information, se Användning av ADO för att köra SQLXML-frågor.
Detta är den partiella resultatmängden:
<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. Att specificera sql:key-fields för att skapa korrekt nästling i resultatet
I följande schema finns ingen hierarki specificerad med sql<:relationship>. Schemat kräver fortfarande att sql:key-fields-annotationen specificeras för att unikt identifiera anställda i tabellen 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>
För att skapa ett fungerande exempel av detta schema
Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som KeyFields2.xml.
Kopiera följande mall och klistra in den i en textfil. Spara filen som KeyFields2T.xml i samma katalog där du sparade KeyFields2.xml. XPath-frågan i mallen returnerar alla <HumanResources.Employee-element> :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields2.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>Den katalogväg som anges för mappningsschemat (KeyFields2.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:
mapping-schema="C:\MyDir\KeyFields2.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
För mer information, se Användning av ADO för att köra SQLXML-frågor.
Det här är resultatet:
<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>