Freigeben über


Angeben von Beziehungen mit 'sql:relationship' (XDR-Schema)

Wichtiger HinweisWichtig

Dieses Thema ist als Referenz für ältere Anwendungen enthalten. Für diese Funktion wird künftig keine Entwicklungsarbeit mehr geleistet. Vermeiden Sie daher das Verwenden dieser Funktion bei neuen Entwicklungsarbeiten. Verwenden Sie stattdessen XSD-Schemas mit Anmerkungen zum Erstellen von XML-Sichten. Weitere Informationen finden Sie unter Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0). Sie können vorhandene XDR-Schemas mit Anmerkungen in XSD-Schemas konvertieren. Weitere Informationen finden Sie unter Konvertieren von XDR-Schemas mit Anmerkungen in gleichbedeutende XSD-Schemas (SQLXML 4.0).

Die Elemente in einem XML-Dokument können in Beziehung gesetzt werden. Die Elemente können hierarchisch geschachtelt sein, und es können ID-, IDREF- oder IDREFS-Beziehungen zwischen den Elementen angegeben werden.

In einem XDR-Schema enthält beispielsweise ein <Customer>-Element untergeordnete <Order>-Elemente. Das <Customer>-Element wird einer Tabelle zugeordnet, die Kundendaten enthält (z. B. Sales.Customer in der AdventureWorks2008R2-Datenbank). Das <Order>-Element wird einer Tabelle zugeordnet, die Auftragsdaten in derselben Datenbank enthält (z. B. Sales.SalesORderHeader). Da Kunden Bestellungen aufgeben, stehen diese zugrunde liegenden Tabellen Sales.Customer und Sales.SalesOrderHeader in Beziehung,. CustomerID in der Sales.SalesOrderHeader-Tabelle ist ein Fremdschlüssel, der auf den Primärschlüssel CustomerID in der in der Sales.Customer-Tabelle verweist. Sie können diese Beziehungen unter Elementen dieses Zuordnungsschemas mit der <sql:relationship>-Anmerkung herstellen.

In dem mit Anmerkungen versehenen XDR-Schema wird die <sql:relationship>-Anmerkung verwendet, um die Elemente des Schemas hierarchisch zu schachteln. Dies geschieht basierend auf der Primärschlüssel- und Fremdschlüsselbeziehung zwischen den zugrunde liegenden Tabellen, denen die Elemente zugeordnet sind. Sie müssen Folgendes angeben, wenn Sie die <sql:relationship>-Anmerkung festlegen:

  • Die primäre Tabelle (Sales.Customer) und die fremde Tabelle (Sales.SalesOrderHeader) und

  • die notwendige Verknüpfungsbedingung (CustomerID in der Sales.SalesOrderHeader-Tabelle ist ein Fremdschlüssel, der auf den Primärschlüssel CustomerID in der in der Sales.Customer-Tabelle verweist).

Diese Informationen werden zum Generieren der richtigen Hierarchie verwendet (für jedes <customer>-Element, die zugehörigen <order>-Elements werden als untergeordnete Elemente angezeigt).

Die folgenden Attribute werden mit der <sql:relationship>-Anmerkung festgelegt, um die Tabellenamen und die erforderlichen Verknüpfungsinformationen anzugeben. Diese Attribute sind nur mit dem sql:relationship-Element gültig:

  • key-relation
    Gibt die primäre Beziehung (Tabelle) an.

  • key
    Gibt den Primärschlüssel von key-relation an. Wenn der Primärschlüssel aus mehreren Spalten besteht, werden Werte mit einer Leerstelle angegeben. Es besteht positionelle Zuordnung zwischen den Werten, die für den mehrspaltigen Schlüssel und für den Fremdschlüssel festgelegt wurden.

  • foreign-relation
    Gibt die fremde Beziehung (Tabelle) an.

  • foreign-key
    Gibt den Fremdschlüssel im foreign-relation an, der in key-relation auf key verweist. Wenn der Fremdschlüssel aus mehreren Attributen (Spalten) besteht, werden Werte des Fremdschlüssels mit einer Leerstelle angegeben. Es besteht positionelle Zuordnung zwischen den Werten, die für den mehrspaltigen Schlüssel und für den Fremdschlüssel festgelegt wurden.

HinweisHinweis

Sie müssen sicherstellen, dass die Microsoft SQL Server-Datentypen von key und foreign-key so angelegt sind, dass sie bei Bedarf implizit konvertiert werden können.

Das sql:relationship-Tag kann nur <element>- oder <attribute>-Elementen in einem Schema mit Anmerkungen hinzugefügt werden. Wenn sql:relationship in einem Attribut festgelegt ist, sollte für das Attribut sql:relation und sql:field festgelegt sein, um sicherzustellen, dass ein einzelner Wert abgerufen werden kann (mehrere Attribute mit demselben Namen sind in XML ungültig). Wenn sql:relationship in einem Element festgelegt ist, kann die Beziehung zu einem einzelnen Wert oder einem Satz von Werten führen.

Das sql:relationship-Tag wird verwendet, um eine einzelne logische Beziehung zwischen zwei Entitäten anzugeben. Die Attribute definieren die Beziehungen und die Felder, die verwendet werden, um die logische Beziehung zu definieren. In einem Element oder Attribut in einem Schema mit Anmerkungen können mehrere Instanzen von sql:relationship festgelegt werden, wodurch angegeben wird, dass eine komplexe Beziehung zwischen dem Element oder Attribut und dem darin enthaltenen Element besteht. Alle Instanzen von sql:relationship werden zusammen verwendet, um die komplexe Beziehung zu definieren.

Wenn in einem Element oder Attribut mehrere Instanzen des sql:relationship-Tags angegeben sind, ist die Reihenfolge, in der sie angezeigt werden, wichtig.

Die sql:key-fields-Anmerkung muss in einem Element angegeben werden, das ein untergeordnetes Element und ein sql:relationship-Element enthält, welches eine Beziehung zwischen dem Element und dem untergeordneten Element definiert, das nicht den Primärschlüssel der im übergeordneten Element angegebenen Tabelle bereitstellt. Weitere Informationen finden Sie unter Identifizieren von Schlüsselspalten mithilfe von sql:key-Feldern (SQLXML 4.0). Um die richtige Schachtelung im Ergebnis zu erzeugen, wird die Angabe von sql:key-fields in allen Schemas empfohlen.

HinweisHinweis

Im Zuordnungsschema wird bei relationalen Werten, z. B. Tabellenname und Spaltenname, die Groß-/Kleinschreibung beachtet.

Beispiele

Es müssen bestimmte Anforderungen erfüllt sein, damit aus den folgenden Beispielen funktionstüchtige Beispiele erstellt werden können. Weitere Informationen finden Sie unter Anforderungen zum Ausführen von SQLXML-Beispielen.

A. Angeben von sql:relationship für ein <element>

Dieses mit Anmerkungen versehene XDR-Schema enthält die Elemente <Customer> und <Order>. Das <Order>-Element ist ein untergeordnetes Element des <Customer>-Elements.

Im Schema wird die sql:relationship-Anmerkung für das untergeordnete <Order>-Element angegeben. Die Anmerkung erkennt CustomerID in der Sales.SalesOrderHeader-Tabelle als Fremdschlüssel, der auf den Primärschlüssel CustomerID in der Sales.Customer-Tabelle verweist. Daher werden Bestellungen eines Kunden als untergeordnetes Element dieses <Customer>-Elements angezeigt.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="CustomerID" />
    <AttributeType name="SalesOrderID" />
    <AttributeType name="OrderDate" />

    <attribute type="CustomerID" />
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />
    <attribute type="CustomerID" />
    <element type="Order" >
             <sql:relationship 
                     key-relation="Sales.Customer"
                    key="CustomerID"
                    foreign-key="CustomerID"
                    foreign-relation="Sales.SalesOrderHeader" />
    </element>
</ElementType>
</Schema>
HinweisHinweis

Im Zuordnungsschema wird bei relationalen Werten, z. B. Tabellenname und Spaltenname, die Groß-/Kleinschreibung beachtet. Im vorherigen Beispiel ist Customers der Wert des sql:relation-Attributs. Der entsprechende key-relation-Attributwert muss auch Customers sein.

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen sql-relationship-xdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen sql-relationship-xdrT.xml im gleichen Verzeichnis, in dem Sie sql-relationship-xdr.xml gespeichert haben. Die Abfrage in der Vorlage wählt einen Kunden mit der CustomerID des Werts 1 aus.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sql-relationship-xdr.xml">
        Customer[@CustomerID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Der für das Zuordnungsschema (sql-relationship-xdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\sql-relationship-xdr.xml"
    
  3. 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 4.0-Abfragen.

Im Folgenden wird ein Teil des Resultsets aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1">
    <Order CustomerID="1" SalesOrderID="43860" OrderDate="2005-08-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="44501" OrderDate="2005-11-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="45283" OrderDate="2006-02-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="46042" OrderDate="2006-05-01T00:00:00" /> 
  </Customer>
</ROOT>

B. Geben Sie sql:relationship auf einem <attribute> an, und erstellen Sie Dokumentverweise mit ID und IDREFS.

In diesem Beispiel werden lokale Dokumentverweise mit ID und IDREFS angegeben. Das XDR-Beispielschema besteht aus einem <Customer>-Element, das der Sales.Customer-Tabelle zugeordnet wird. Dieses Element besteht aus einem untergeordneten <Order>-Element, das der Sales.SalesOrderHeader-Tabelle zugeordnet wird.

Im Beispiel wird sql:relationship zweimal angegeben:

  • sql:relationship wird im untergeordnete <Order>-Element angegeben. Daher werden Bestellungen eines Kunden als untergeordnetes Element dieses <Customer>-Elements angezeigt.

  • sql:relationship wird ebenfalls auf dem OrderIDList-Attribut des <Customer>-Elements angegeben. Dieses Attribut ist als IDREFS-Typ definiert und verweist auf das SalesOrderID-Attribut (ein Attribut vom Typ ID) des <Order>-Elements. Daher ist sql:relationship erforderlich. In diesem Fall ist es durch die sql:relationship-Anmerkung möglich, dass eine Liste von Bestellungen eines Kunden mit diesem <Customer>-Element angezeigt wird.

    Attribute vom Typ IDREFS können dann verwendet werden, um auf das ID-Attribut zu verweisen. Auf diese Weise werden dokumentinterne Links gebildet.

Da Nummern keine gültigen ID-Werte darstellen (es müssen Namenstoken sein), wurde mithilfe von sql:id-prefix die Order ID in einen Zeichenfolgenwert umgewandelt. Weitere Informationen finden Sie unter Erstellen gültiger Attribute vom Typ ID, IDREF und IDREFS mit sql:id-Präfix (XDR-Schema).

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID"  />

    <attribute type="CustomerID" />
    <AttributeType name="OrderIDList" dt:type="idrefs" 
                                      sql:id-prefix="Ord-"/>
    <attribute type="OrderIDList" sql:relation="Sales.SalesOrderHeader" 
                                  sql:field="SalesOrderID">
                 <sql:relationship
                      key-relation="Sales.Customer"
                      key="CustomerID"
                      foreign-relation="Sales.SalesOrderHeader"
                      foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
                 <sql:relationship key-relation="Sales.Customer"
                      key="CustomerID"
                      foreign-relation="Sales.SalesOrderHeader"
                      foreign-key="CustomerID" />
    </element>
  </ElementType>
</Schema>

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen idIdref-xd.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen idIdref-xdrT.xml im selben Verzeichnis, in dem Sie idIdref-xdr.xml gespeichert haben. Die Abfrage in der Vorlage wählt einen Kunden mit der CustomerID des Werts 1 aus.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="idIdref-xdr.xml">
        Customer[@CustomerID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Der für das Zuordnungsschema (idIdref-xdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\idIdref-xdr.xml"
    
  3. 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 4.0-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1" 
            OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2005-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2005-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2006-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2006-05-01T00:00:00" /> 
  </Customer>
</ROOT>

C. Angeben von 'sql:relationship' für mehrere Elemente

In diesem Beispiel besteht das mit Anmerkungen versehene XDR-Schema aus den Elementen <Customer>, <Order> und <OD>.

Das <Order>-Element ist ein untergeordnetes Element des <Customer>-Elements. sql:relationship wird für das untergeordnete <Order>-Element angegeben. Folglich werden Bestellungen für einen Kunden als untergeordnete Elemente von <Customer> angezeigt.

Das <Order>-Element enthält das untergeordnete <OD>-Element. sql:relationship wird für das untergeordnete <OD>-Element angegeben. Folglich werden Details einer Bestellung als untergeordnete Elemente dieses <Order>-Elements angezeigt.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
    <AttributeType name="SalesOrderID" />
    <AttributeType name="ProductID" />

    <attribute type="SalesOrderID" />
    <attribute type="ProductID" />
</ElementType>

<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="CustomerID" />
    <AttributeType name="SalesOrderID" />
    <AttributeType name="OrderDate" />

    <attribute type="CustomerID" />
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
    <element type="OD" >
             <sql:relationship 
                   key-relation="Sales.SalesOrderHeader"
                   key="SalesOrderID"
                   foreign-key="SalesOrderID"
                   foreign-relation="Sales.SalesOrderDetail" />
    </element>
</ElementType>

<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />

    <attribute type="CustomerID" />
    <element type="Order" >
      <sql:relationship 
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader" />
    </element>
</ElementType>
</Schema>

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen sql-relationship-multi-xdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen sql-relationship-multi-xdrT.xml im gleichen Verzeichnis, in dem Sie sql-relationship-multi-xdr.xml gespeichert haben. Die Abfrage in der Vorlage gibt die Bestellinformationen für einen Kunden mit der CustomerID mit dem Wert 1 und der SalesOrderID mit dem Wert 43860 zurück.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sql-relationship-multi-xdr.xml">
        /Customer[@CustomerID="1"]/Order[@SalesOrderID=43860]
      </sql:xpath-query>
    </ROOT>
    

    Der für das Zuordnungsschema (sql-relationship-multi-xdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\sql-relationship-multi-xdr.xml"
    
  3. 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 4.0-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order CustomerID="1" SalesOrderID="43860" OrderDate="2005-08-01T00:00:00">
    <OD SalesOrderID="43860" ProductID="761" /> 
    <OD SalesOrderID="43860" ProductID="770" /> 
    <OD SalesOrderID="43860" ProductID="758" /> 
    <OD SalesOrderID="43860" ProductID="765" /> 
    <OD SalesOrderID="43860" ProductID="732" /> 
    <OD SalesOrderID="43860" ProductID="762" /> 
    <OD SalesOrderID="43860" ProductID="738" /> 
    <OD SalesOrderID="43860" ProductID="768" /> 
    <OD SalesOrderID="43860" ProductID="753" /> 
    <OD SalesOrderID="43860" ProductID="729" /> 
    <OD SalesOrderID="43860" ProductID="763" /> 
    <OD SalesOrderID="43860" ProductID="756" /> 
  </Order>
</ROOT>

D. Angeben indirekter Beziehungen

In diesem Beispiel besteht das mit Anmerkungen versehene XDR-Schema aus den Elementen <Customer> und <OD>. Die Beziehung zwischen diesen Elementen ist indirekt (die Sales.Customer-Tabelle ist über die Sales.SalesOrderHeader-Tabelle mit der Sales.SalesOrderDetail-Tabelle verknüpft). Um einen Kunden mit den Bestelldetailinformationen in Beziehung zu bringen, wird zunächst die Beziehung zwischen der Sales.Customer-Tabelle und der Sales.SalesOrderHeader-Tabelle festgelegt. Dann wird die Beziehung zwischen den Tabellen Sales.SalesOrderHeader und Sales.SalesOrderDetail festgelegt.

Das ist das Schema:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
    <AttributeType name="SalesOrderID" />
    <AttributeType name="ProductID" />
    <AttributeType name="UnitPrice" />

    <attribute type="SalesOrderID" />
    <attribute type="ProductID" />
    <attribute type="UnitPrice" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />
    <attribute type="CustomerID" />
    <element type="OD" >
             <sql:relationship 
                    key-relation="Sales.Customer"
                    key="CustomerID"
                    foreign-relation="Sales.SalesOrderHeader"
                    foreign-key="CustomerID"/>
             <sql:relationship 
                    key-relation="Sales.SalesOrderHeader"
                    key="SalesOrderID"
                    foreign-relation="Sales.SalesOrderDetail" 
                    foreign-key="SalesOrderID" />
    </element>
</ElementType>
</Schema>

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen indirect-relationship-xdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen indirect-relationship-xdrT.xml im gleichen Verzeichnis, in dem Sie indirect-relationship-xdr.xml gespeichert haben. Die Abfrage in der Vorlage gibt die Bestellinformationen für einen Kunden mit der CustomerID mit dem Wert 1 zurück.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
    <sql:xpath-query mapping-schema="indirect-relationship-xdr.xml" >
    /Customer[@CustomerID="1"]
    </sql:xpath-query>
    </ROOT>
    

    Der für das Zuordnungsschema (indirect-relationship-xdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\indirect-relationship-xdr.xml"
    
  3. 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 4.0-Abfragen.

Dies ist das Teilergebnis:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1">
    <OD SalesOrderID="43860" ProductID="761" UnitPrice="503.3507" /> 
    <OD SalesOrderID="43860" ProductID="770" UnitPrice="503.3507" /> 
    <OD SalesOrderID="43860" ProductID="758" UnitPrice="1049.7528" /> 
    <OD SalesOrderID="43860" ProductID="765" UnitPrice="503.3507" /> 
    ...
  </Customer>
  </ROOT>

E. Angeben von Joinbeziehungen mit mehreren Schlüsseln

Durch Angeben eines Joins mit sql:relationship können Sie eine Verknüpfung festlegen, die zwei oder mehr Spalten einschließt. In diesem Fall werden die Spaltennamen von key und foreign-key mit einem Leerzeichen aufgelistet.

In diesem Beispiel wird davon ausgegangen, dass diese zwei Tabellen sind in einer temporären Datenbank (z. B. tempdb) gespeichert sind:

  • dbo.Cust (fname, lname)

  • dbo.Ord (OrderID, fname, lname)

Die fname und lname-Spalten bilden den Primärschlüssel der Tabelle Cust. OrderID ist der Primärschlüssel der Ord-Tabelle. fname und lname in der Ord-Tabelle sind Fremdschlüssel, die auf den fname- und lname-Primärschlüssel in der Cust-Tabelle verweisen.

Dieses Schema besteht aus <Cust>-<Ord>-Elementen. sql:relationship wird zum Verknüpfen dieser Elemente verwendet.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Ord" sql:relation="Ord" >
    <AttributeType name="OrderID" />

    <attribute type="OrderID" />
</ElementType>

<ElementType name="Cust" sql:relation="Cust" >
    <AttributeType name="fname" />
    <AttributeType name="lname" />
    <attribute type="fname" />
    <attribute type="lname" />
    <element type="Ord" >
             <sql:relationship 
                    key-relation="Cust"
                    key="fname lname"
                    foreign-relation="Ord"
                    foreign-key="fname lname"/>
    </element>
</ElementType>
</Schema>

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Erstellen Sie die zwei Tabellen: Cust und Ord.

    USE tempdb
    CREATE TABLE dbo.Cust(
           fname  varchar(20), 
           lname   varchar(20)
           )
    CREATE TABLE dbo.Ord (
           OrderID int primary key, 
           fname  varchar(20), 
           lname   varchar(20)
           )
    GO
    
  2. Fügen Sie diese Beispieldaten hinzu:

    INSERT INTO Cust values ('Nancy', 'Davolio')
    INSERT INTO Cust values('Andrew', 'Fuller')
    INSERT INTO Ord values (1,'Nancy', 'Davolio')
    INSERT INTO Ord values (2,'Nancy', 'Davolio')
    INSERT INTO Ord values (3,'Andrew', 'Fuller')
    
  3. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen multikey-join-xdr.xml.

  4. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen multikey-join-xdrT.xml im gleichen Verzeichnis, in dem Sie multikey-join-xdr.xml gespeichert haben. Die Abfrage in der Vorlage gibt Kundeninformationen zurück.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
      <sql:xpath-query mapping-schema="multikey-join-xdr.xml" >
        /Cust
      </sql:xpath-query>
    </ROOT>
    

    Der für das Zuordnungsschema (multikey-join-xdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\SqlXmlTest\multikey-join-xdr.xml"
    
  5. 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 4.0-Abfragen.

Dies ist das Teilergebnis:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Cust fname="Andrew" lname="Fuller"> 
    <Ord OrderID="3" /> 
  </Cust> 
  <Cust fname="Nancy" lname="Davolio"> 
    <Ord OrderID="1" /> 
    <Ord OrderID="2" /> 
  </Cust> 
</ROOT>