Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn eine XPath-Abfrage für ein XSD-Schema angegeben wird, sind wichtige Informationen in den meisten Fällen erforderlich, um die richtige Schachtelung im Ergebnis zu erhalten. Die Angabe der sql:key-fields Anmerkung ist eine Möglichkeit, sicherzustellen, dass die entsprechende Hierarchie generiert wird.
Hinweis
Um eine ordnungsgemäße Schachtelung sicherzustellen, wird empfohlen, dass Sie für Elemente angeben sql:key-fields , die Tabellen zugeordnet sind. Der erzeugte XML-Code ist für die Sortierung des zugrunde liegenden Resultsets vertraulich. Wenn sql:key-fields nicht angegeben, wird der generierte XML-Code möglicherweise nicht ordnungsgemäß gebildet.
Der Wert der sql:key-fields Spalte(n), die die Zeilen in der Beziehung eindeutig identifiziert. Wenn mehr als eine Spalte erforderlich ist, um eine Zeile eindeutig zu identifizieren, werden die Spaltenwerte durch Leerzeichen getrennt.
Sie müssen die sql:key-fields Anmerkung verwenden, wenn ein Element eine <sql:relationship> enthält, die zwischen dem Element und einem untergeordneten Element definiert ist, aber nicht den Primärschlüssel der Tabelle bereitstellt, die im übergeordneten Element angegeben ist.
Beispiele
Es müssen bestimmte Anforderungen erfüllt sein, damit aus den folgenden Beispielen funktionierende Beispiele erstellt werden können. Weitere Informationen finden Sie unter Anforderungen für das Ausführen von SQLXML-Beispielen.
Ein. Erstellen der geeigneten Schachtelung, wenn <sql:relationship> keine ausreichenden Informationen bereitstellt
In diesem Beispiel wird gezeigt, wo sql:key-fields angegeben werden muss.
Betrachten Sie das folgende Schema. Das Schema gibt eine Hierarchie zwischen den <Elementen Order> und <Customer> an, in denen das <Order-Element> das übergeordnete Element und das <Customer-Element> ein untergeordnetes Element ist.
Das <sql:relationship-Tag> wird verwendet, um die Beziehung zwischen übergeordneten und untergeordneten Elementen anzugeben. Sie identifiziert "CustomerID" in der Tabelle "Sales.SalesOrderHeader" als übergeordneter Schlüssel, der auf den untergeordneten Schlüssel "CustomerID" in der Tabelle "Sales.Customer" verweist. Die in <sql:relationship> bereitgestellten Informationen reichen nicht aus, um Zeilen in der übergeordneten Tabelle (Sales.SalesOrderHeader) eindeutig zu identifizieren. Daher ist die generierte Hierarchie ohne Anmerkung sql:key-fields ungenau.
Bei sql:key-fields Angabe in <Order> identifiziert die Anmerkung die Zeilen in der übergeordneten Tabelle (Sales.SalesOrderHeader) eindeutig, und die untergeordneten Elemente werden unterhalb des übergeordneten Elements angezeigt.
Dies ist das Schema:
<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>
So erstellen Sie ein funktionierendes Beispiel für dieses Schema
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als KeyFields1.xml.
Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als KeyFields1T.xml im selben Verzeichnis, in dem Sie KeyFields1.xmlgespeichert haben. Die XPath-Abfrage in der Vorlage gibt alle <Order-Elemente> mit einer CustomerID von weniger als 3 zurück.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields1.xml"> /Order[@CustomerID < 3] </sql:xpath-query> </ROOT>Der für das Zuordnungsschema (KeyFields1.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\MyDir\KeyFields1.xml"Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.
Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.
Dies ist der partielle Resultset:
<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. Angeben von sql:key-fields, um eine ordnungsgemäße Schachtelung im Ergebnis zu erzeugen
Im folgenden Schema ist keine Hierarchie mit <sql:relationship> angegeben. Das Schema erfordert weiterhin die Angabe der sql:key-fields Anmerkung, um Mitarbeiter in der Tabelle "HumanResources.Employee" eindeutig zu identifizieren.
<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>
So erstellen Sie ein funktionierendes Beispiel für dieses Schema
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als KeyFields2.xml.
Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als KeyFields2T.xml im selben Verzeichnis, in dem Sie KeyFields2.xmlgespeichert haben. Die XPath-Abfrage in der Vorlage gibt alle <HumanResources.Employee-Elemente> zurück:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields2.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>Der für das Zuordnungsschema (KeyFields2.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\MyDir\KeyFields2.xml"Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.
Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.
Dies ist das Ergebnis:
<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>