Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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>