Freigeben über


Aktualisieren von Daten mit XML-Updategrams (SQLXML 4.0)

Wenn Sie vorhandene Daten aktualisieren, müssen Sie sowohl den <before> -Block als auch den <after>-Block angeben. Die im <before>-Block und <after>-Block angegebenen Elemente beschreiben die gewünschte Änderung. Das Updategram verwendet das bzw. die im <before>-Block angegebene(n) Element(e), um den oder die in der Datenbank vorhandenen Datensätze zu identifizieren. Das bzw. die entsprechende(n) Element(e) im <after>-Block zeigen an, wie die Datensätze nach Ausführen des Updatevorgangs aussehen sollten. Aus diesen Informationen erstellt das Updategram eine SQL-Anweisung, die mit dem <after>-Block übereinstimmt. Das Updategram verwendet dann diese Anweisung, um die Datenbank zu aktualisieren.

Dies ist das Updategramformat für einen Updatevorgang:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema="SampleSchema.xml"]  >
   <updg:before>
      <ElementName [updg:id="value"] .../>
      [<ElementName [updg:id="value"] .../> ... ]
   </updg:before>
   <updg:after>
      <ElementName [updg:id="value"] ... />
      [<ElementName [updg:id="value"] .../> ...]
   </updg:after>
</updg:sync>
</ROOT>
  • <updg:before>
    Die Elemente im <before>-Block identifizieren vorhandene Datensätze in den Datenbanktabellen.

  • <updg:after>
    Die Elemente im <after>-Block beschreiben, wie die im <before>-Block angegebenen Datensätze nach Übernehmen der Updates aussehen sollten.

Das mapping-schema-Attribut identifiziert das vom Updategram zu verwendende Zuordnungsschema. Wenn das Updategram ein Zuordnungsschema angibt, müssen die in den Blöcken <before> und <after> angegebenen Element- und Attributnamen mit den Namen im Schema übereinstimmen. Das Zuordnungsschema ordnet diese Element- oder Attributnamen der Datenbanktabelle und den Spaltennamen zu.

Wenn ein Updategram kein Schema angibt, verwendet das Updategram die Standardzuordnung. Bei der Standardzuordnung wird der im Updategram angegebene <Elementname> der Datenbanktabelle zugeordnet, und die untergeordneten Elemente oder Attribute werden den Datenbankspalten zugeordnet.

Ein Element im <before>-Block muss mit nur einer Tabellenzeile in der Datenbank übereinstimmen. Wenn das Element mit mehreren Tabellenzeilen oder mit keiner Tabellenzeile übereinstimmt, gibt das Updategram einen Fehler zurück und bricht die Verarbeitung des gesamten <sync>-Blocks ab.

Ein Updategram kann mehrere <sync>-Blöcke enthalten. Jeder <sync>-Block wird als eine Transaktion behandelt. Jeder <sync>-Block kann über mehrere <before>- und <after>-Blöcke verfügen. Wenn Sie beispielsweise zwei der vorhandenen Datensätze aktualisieren, sollten Sie zwei <before>- und <after>-Paare angeben, eines für jeden zu aktualisierenden Datensatz.

Verwenden des updg:id-Attributs

Wenn mehrere Elemente in den <before>- und <after>-Blöcken angegeben sind, verwenden Sie die updg:id-Attribute um Zeilen in den <before> - und <after>-Blöcken zu markieren. Die Verarbeitungslogik bestimmt mithilfe dieser Informationen, welcher Datensatz im <before>-Block zu welchem Datensatz im <after>-Block gehört.

Das updg:id-Attribut ist nicht notwendig (aber empfohlen), wenn einer der beiden folgenden Fälle zutrifft:

  • Die Elemente im angegebenen Zuordnungsschema verfügen über das auf ihnen definierte sql:key-fields-Attribut.

  • Ein oder mehrere bestimmte Werte sind für das Schlüsselfeld oder die Schlüsselfelder im Updategram angegeben.

Wenn eines von beidem der Fall ist, verwendet das Updategram die in den sql:key-fields angegebenen Schlüsselspalten, um die Elemente in den <before>- und <after>-Blöcken einander zuzuordnen.

Wenn das Zuordnungsschema keine Schlüsselspalten identifiziert (unter Verwendung von sql:key-fields) oder das Updategram einen Schlüsselspaltenwert aktualisiert, müssen Sie updg:id angeben.

Die in den <before>- und <after>-Blöcken identifizierten Datensätze müssen nicht in der gleichen Reihenfolge stehen. Das updg:id-Attribut erzwingt die Zuordnung der in den <before>- und <after>-Blöcken angegebenen Elemente.

Wenn Sie ein Element im <before>-Block und nur ein entsprechendes Element im <after>-Block angeben, ist die Verwendung von updg:id nicht notwendig. Es wird jedoch empfohlen, updg:id trotzdem anzugeben, um Mehrdeutigkeit zu vermeiden.

Beispiele

Bevor Sie die Updategrambeispiele verwenden, beachten Sie Folgendes:

  • Die meisten der Beispiele verwenden die Standardzuordnung (d. h. es ist kein Zuordnungsschema im Updategram angegeben). Weitere Beispiele für Updategrams, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines Zuordnungsschemas mit Anmerkungen in einem Updategram (SQLXML 4.0).

  • Die meisten der Beispiele verwenden die AdventureWorks-Beispieldatenbank. Alle Updates werden für die Tabellen in dieser Datenbank übernommen. Sie können die AdventureWorks-Datenbank wiederherstellen.

A.Aktualisieren eines Datensatzes

Das folgende Updategram aktualisiert den Nachnamen des Mitarbeiters in der Person.Contact-Tabelle in der AdventureWorks-Datenbank zu "Fuller". Das Updategram gibt kein Zuordnungsschema an, deswegen verwendet das Updategram die Standardzuordnung.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
   <Person.Contact ContactID="1" />
</updg:before>
<updg:after>
   <Person.Contact LastName="Abel-Achong" />
</updg:after>
</updg:sync>
</ROOT>

Der im <before>-Block beschriebene Datensatz stellt den aktuellen Datensatz in der Datenbank dar. Das Updategram verwendet alle im <before>-Block angegebenen Spaltenwerte, um den Datensatz zu suchen. In diesem Updategram bietet der <before>-Block nur die ContactID-Spalte, deswegen verwendet das Updategram nur diesen Wert, um den Datensatz zu suchen. Wenn Sie diesem Block den LastName-Wert hinzufügen würden, würde das Updategram sowohl den ContactID- als auch den LastName-Wert für die Suche verwenden.

In diesem Updategram bietet der <after>-Block nur den LastName-Spaltenwert, da dies der einzige zu ändernde Wert ist.

So testen Sie das Updategram

  1. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateLastName.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

B.Aktualisieren von mehreren Datensätzen mit dem Attribut "updg:id"

In diesem Beispiel führt das Updategram zwei Updates auf die HumanResources.Shift-Tabelle in der AdventureWorks-Datenbank aus:

  • Es ändert den Namen der ursprünglichen Tagschicht, die um 7.00 Uhr beginnt, von "Day" in "Early Morning".

  • Es fügt eine neue Schicht namens "Late Morning" ein, die um 10.00 Uhr beginnt.

Im Updategram erstellt das updg:id-Attribut Zuordnungen zwischen Elementen in den <before>- und <after>-Blöcken.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
       <HumanResources.Shift updg:id="x" Name="Day" />
    </updg:before>
    <updg:after>
      <HumanResources.Shift updg:id="y" Name="Late Morning" 
                            StartTime="1900-01-01 10:00:00.000"
                            EndTime="1900-01-01 18:00:00.000"
                            ModifiedDate="2004-06-01 00:00:00.000"/>
      <HumanResources.Shift updg:id="x" Name="Early Morning" />
    </updg:after>
  </updg:sync>
</ROOT>

Das updg:id-Attribut ordnet die erste Instanz des <HumanResources.Shift>-Elements im <before>-Block der zweiten Instanz des <HumanResources.Shift>-Elements im <after>-Block zu.

So testen Sie das Updategram

  1. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleRecords.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

C.Angeben von mehreren <before>- und <after>-Blöcken

Sie können das Updategram in Beispiel B mithilfe von mehreren <before> - und <after>-Blockpaaren schreiben, um Mehrdeutigkeiten zu vermeiden. Das Angeben von <before>- und <after>-Paaren ist eine Methode, mehrere Updates möglichst eindeutig anzugeben. Außerdem ist es, wenn alle <before>- und <after>-Blöcken höchstens ein Element angeben, nicht notwendig, das updg:id-Attribut zu verwenden.

HinweisHinweis

Das <after>-Tag muss direkt auf das entsprechende <before>-Tag folgen, um ein Paar zu bilden.

Im folgenden Updategram aktualisiert das erste <before>- und <after>-Paar den Schichtnamen für die Tagschicht. Das zweite Paar fügt einen neuen Schichtdatensatz ein.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
       <HumanResources.Shift ShiftID="1" Name="Day" />
    </updg:before>
    <updg:after>
      <HumanResources.Shift Name="Early Morning" />
    </updg:after>
    <updg:before>
    </updg:before>
    <updg:after>
      <HumanResources.Shift Name="Late Morning" 
                            StartTime="1900-01-01 10:00:00.000"
                            EndTime="1900-01-01 18:00:00.000"
                            ModifiedDate="2004-06-01 00:00:00.000"/>
    </updg:after>
  </updg:sync>
</ROOT>

So testen Sie das Updategram

  1. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleBeforeAfter.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

D.Angeben von mehreren <sync>-Blöcken

Sie können mehrere <sync>-Blöcke in einem Updategram angeben. Jeder angegebene <sync>-Block ist eine unabhängige Transaktion.

Im folgenden Updategram aktualisiert der erste <sync>-Block einen Datensatz in der Sales.Customer-Tabelle. Der Einfachheit halber gibt das Updategram nur die erforderlichen Spaltenwerte an, nämlich den Identitätswert (CustomerID) und den zu aktualisierenden Wert (SalesPersonID).

Der zweite <sync> -Block fügt der Sales.SalesOrderHeader-Tabelle zwei Datensätze hinzu. Für diese Tabelle ist SalesOrderID eine Spalte vom Typ IDENTITY. Deshalb gibt das Updategram nicht den Wert von SalesOrderID in allen <Sales.SalesOrderHeader>-Elementen an.

Das Angeben mehrerer <sync>-Blöcke ist nützlich, da, falls der zweite <sync>-Block (eine Transaktion) der Sales.SalesOrderHeader-Tabelle keine Datensätze hinzufügen kann, der erste <sync>-Block dennoch den Kundendatensatz in der Sales.Customer-Tabelle aktualisieren kann.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
      <Sales.Customer CustomerID="1" SalesPersonID="280" />
    </updg:before>
    <updg:after>
      <Sales.Customer CustomerID="1" SalesPersonID="283" />
    </updg:after>
  </updg:sync>
  <updg:sync >
    <updg:before>
    </updg:before>
    <updg:after>
   <Sales.SalesOrderHeader 
             CustomerID="1"
             RevisionNumber="1"
             OrderDate="2004-07-01 00:00:00.000"
             DueDate="2004-07-13 00:00:00.000"
             OnlineOrderFlag="0"
             ContactID="378"
             BillToAddressID="985"
             ShipToAddressID="985"
             ShipMethodID="5"
             SubTotal="24643.9362"
             TaxAmt="1971.5149"
             Freight="616.0984"
             rowguid="01010101-2222-3333-4444-556677889900"
             ModifiedDate="2004-07-08 00:00:00.000" />
   <Sales.SalesOrderHeader
             CustomerID="1"
             RevisionNumber="1"
             OrderDate="2004-07-01 00:00:00.000"
             DueDate="2004-07-13 00:00:00.000"
             OnlineOrderFlag="0"
             ContactID="378"
             BillToAddressID="985"
             ShipToAddressID="985"
             ShipMethodID="5"
             SubTotal="1000.0000"
             TaxAmt="0.0000"
             Freight="0.0000"
             rowguid="10101010-2222-3333-4444-556677889900"
             ModifiedDate="2004-07-09 00:00:00.000" />
    </updg:after>
  </updg:sync>
</ROOT>

So testen Sie das Updategram

  1. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleSyncs.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

E.Verwenden eines Zuordnungsschemas

In diesem Beispiel gibt das Updategram mithilfe des mapping-schema-Attributs ein Zuordnungsschema an. (Es gibt keine Standardzuordnung, d. h. das Zuordnungsschema bietet die erforderliche Zuordnung der Elemente und Attribute im Updategram zu den Datenbanktabellen und -spalten.)

Die im Updategram angegebenen Elemente und Attribute verweisen auf die Elemente und Attribute im Zuordnungsschema.

Das folgende XSD-Zuordnungsschema umfasst <Customer>-, <Order>- und <OD>-Elemente, die den Tabellen Sales.Customer, Sales.SalesOrderHeader und Sales.SalesOrderDetail in der Datenbank zugeordnet sind.

<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="CustomerOrder"
          parent="Sales.Customer"
          parent-key="CustomerID"
          child="Sales.SalesOrderHeader"
          child-key="CustomerID" />

    <sql:relationship name="OrderOD"
          parent="Sales.SalesOrderHeader"
          parent-key="SalesOrderID"
          child="Sales.SalesOrderDetail"
          child-key="SalesOrderID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Customer" sql:relation="Sales.Customer" >
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element name="Order" 
                     sql:relation="Sales.SalesOrderHeader"
                     sql:relationship="CustomerOrder" >
           <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="OD" 
                             sql:relation="Sales.SalesOrderDetail"
                             sql:relationship="OrderOD" >
                 <xsd:complexType>
                  <xsd:attribute name="SalesOrderID" type="xsd:integer" />
                  <xsd:attribute name="ProductID" type="xsd:integer" />
                  <xsd:attribute name="UnitPrice" type="xsd:decimal" />
                  <xsd:attribute name="OrderQty" type="xsd:integer" />
                  <xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" /> 
                 </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
              <xsd:attribute name="CustomerID" type="xsd:string" />
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />
              <xsd:attribute name="OrderDate" type="xsd:date" />
           </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="CustomerID"   type="xsd:string" /> 
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Dieses Zuordnungsschema (UpdategramMappingSchema.xml) wird im folgenden Updategram angegeben. Das Updategram fügt in der Sales.SalesOrderDetail-Tabelle ein Auftragselement für einen bestimmten Auftrag hinzu. Das Updategram schließt geschachtelte Elemente ein: ein <OD>-Element ist in einem <Order>-Element geschachtelt. Die Primärschlüssel-Fremdschlüssel-Beziehung zwischen diesen beiden Elementen wird im Zuordnungsschema angegeben.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync mapping-schema="UpdategramMappingSchema.xml" >
    <updg:before>
       <Order SalesOrderID="43659" />
    </updg:before>
    <updg:after>
      <Order SalesOrderID="43659" >
          <OD ProductID="776" UnitPrice="2329.0000"
              OrderQty="2" UnitPriceDiscount="0.0" />
      </Order>
    </updg:after>
  </updg:sync>
</ROOT>

So testen Sie das Updategram

  1. Kopieren Sie das oben stehende Zuordnungsschema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdategramMappingSchema.xml.

  2. Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateWithMappingSchema.xml im selben Ordner, indem Sie das Zuordnungsschema (UpdategramMappingSchema.xml) gespeichert haben.

  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Weitere Beispiele für Updategrams, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines Zuordnungsschemas mit Anmerkungen in einem Updategram (SQLXML 4.0).

F.Verwenden eines Zuordnungsschemas mit IDREFS-Attributen

Dieses Beispiel veranschaulicht, wie Updategrams die IDREFS-Attribute im Zuordnungsschema verwenden, um Datensätze in mehreren Tabellen zu aktualisieren. Nehmen Sie für dieses Beispiel an, dass die Datenbank aus den folgenden Tabellen besteht:

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

Da ein Student sich in viele Kurse einschreiben kann und an einem Kurs zahlreiche Studenten teilnehmen können, wird die dritte Tabelle, die Enrollment-Tabelle, benötigt, um diese m:n-Beziehung darzustellen.

Das folgende XSD-Zuordnungsschema stellt mithilfe der Elemente <Student>, <Course> und <Enrollment> eine XML-Ansicht der Tabellen bereit. Die IDREFS-Attribute im Zuordnungsschema geben die Beziehung zwischen diesen Elementen an. Das StudentIDList-Attribut des <Course>-Elements ist ein Attribut vom Typ IDREFS, das auf die StudentID-Spalte in der Enrollment-Tabelle verweist. Ebenso ist das EnrolledIn-Attribut des <Student>-Elements ein Attribut vom Typ IDREFS, das auf die CourseID-Spalte in der Enrollment-Tabelle verweist.

<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="StudentEnrollment"
          parent="Student"
          parent-key="StudentID"
          child="Enrollment"
          child-key="StudentID" />

    <sql:relationship name="CourseEnrollment"
          parent="Course"
          parent-key="CourseID"
          child="Enrollment"
          child-key="CourseID" />
  </xsd:appinfo>
</xsd:annotation>

  <xsd:element name="Course" sql:relation="Course" 
                             sql:key-fields="CourseID" >
    <xsd:complexType>
    <xsd:attribute name="CourseID"  type="xsd:string" /> 
    <xsd:attribute name="CourseName"   type="xsd:string" /> 
    <xsd:attribute name="StudentIDList" sql:relation="Enrollment"
                 sql:field="StudentID"
                 sql:relationship="CourseEnrollment" 
                                     type="xsd:IDREFS" />

    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Student" sql:relation="Student" >
    <xsd:complexType>
    <xsd:attribute name="StudentID"  type="xsd:string" /> 
    <xsd:attribute name="LastName"   type="xsd:string" /> 
    <xsd:attribute name="EnrolledIn" sql:relation="Enrollment"
                 sql:field="CourseID"
                 sql:relationship="StudentEnrollment" 
                                     type="xsd:IDREFS" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Jedes Mal, wenn Sie dieses Schema in einem Updategram angeben und einen Datensatz in die Course-Tabelle einfügen, fügt das Updategram einen neuen Kursdatensatz in die Course-Tabelle ein. Wenn Sie eine oder mehrere neue StudentIDs für das StudentIDList-Attribut angeben, fügt das Updategram ebenfalls einen Datensatz für jeden neuen Studenten in die Enrollment-Tabelle ein. Das Updategram stellt sicher, dass der Enrollment-Tabelle keine Duplikate hinzugefügt werden.

So testen Sie das Updategram

  1. Erstellen Sie diese Tabellen in der Datenbank, die im virtuellen Stammverzeichnis angegeben wird:

    CREATE TABLE Student(StudentID varchar(10) primary key, 
                         LastName varchar(25))
    CREATE TABLE Course(CourseID varchar(10) primary key, 
                        CourseName varchar(25))
    CREATE TABLE Enrollment(StudentID varchar(10) 
                                      references Student(StudentID),
                           CourseID varchar(10) 
                                      references Course(CourseID))
    
  2. Fügen Sie diese Beispieldaten hinzu:

    INSERT INTO Student VALUES ('S1','Davoli')
    INSERT INTO Student VALUES ('S2','Fuller')
    
    INSERT INTO Course VALUES  ('CS101', 'C Programming')
    INSERT INTO Course VALUES  ('CS102', 'Understanding XML')
    
    INSERT INTO Enrollment VALUES ('S1', 'CS101')
    INSERT INTO Enrollment VALUES ('S1', 'CS102')
    
  3. Kopieren Sie das oben stehende Zuordnungsschema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema.xml.

  4. Speichern Sie das Updategram (SampleUpdategram) im selben Ordner, indem Sie das Zuordnungsschema im vorherigen Schritt gespeichert haben. (Dieses Updategram löscht einen Studenten mit StudentID="1" aus dem Kurs CS102.)

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
      <updg:sync mapping-schema="SampleSchema.xml" >
        <updg:before>
            <Student updg:id="x" StudentID="S1" LastName="Davolio"
                                 EnrolledIn="CS101 CS102" />
        </updg:before>
        <updg:after >
            <Student updg:id="x" StudentID="S1" LastName="Davolio"
                                 EnrolledIn="CS101" />
        </updg:after>
      </updg:sync>
    </ROOT>
    
  5. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um das Updategram auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

  6. Speichern Sie das Updategram wie in den vorherigen Schritten beschrieben und führen Sie es aus. Das Updategram fügt den Studenten mit StudentID="1" wieder dem Kurs CS102 hinzu, indem der Enrollment-Tabelle ein Datensatz hinzugefügt wird.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
      <updg:sync mapping-schema="SampleSchema.xml" >
        <updg:before>
            <Student updg:id="x" StudentID="S1" LastName="Davolio"
                                 EnrolledIn="CS101" />
        </updg:before>
        <updg:after >
            <Student updg:id="x" StudentID="S1" LastName="Davolio"
                                 EnrolledIn="CS101 CS102" />
        </updg:after>
      </updg:sync>
    </ROOT>
    
  7. Speichern Sie das nächste Updategram wie in den vorherigen Schritten beschrieben und führen Sie es aus. Dieses Updategram fügt drei neue Studenten ein und schreibt Sie in den Kurs CS101 ein. Wieder fügt die IDREFS-Beziehung Datensätze in der Enrollment-Tabelle ein.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
      <updg:sync mapping-schema="SampleSchema.xml" >
        <updg:before>
           <Course updg:id="y" CourseID="CS101" 
                               CourseName="C Programming" />
        </updg:before>
        <updg:after >
           <Student updg:id="x1" StudentID="S3" LastName="Leverling" />
           <Student updg:id="x2" StudentID="S4" LastName="Pecock" />
           <Student updg:id="x3" StudentID="S5" LastName="Buchanan" />
           <Course updg:id="y" CourseID="CS101"
                               CourseName="C Programming"
                               StudentIDList="S3 S4 S5" />
        </updg:after>
      </updg:sync>
    </ROOT>
    

Dies ist das entsprechende 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="Enrollment" sql:relation="Enrollment" sql:key-fields="StudentID CourseID">
    <AttributeType name="StudentID" dt:type="id" />
    <AttributeType name="CourseID" dt:type="id" />

    <attribute type="StudentID" />
    <attribute type="CourseID" />
  </ElementType>
  <ElementType name="Course" sql:relation="Course" sql:key-fields="CourseID">
    <AttributeType name="CourseID" dt:type="id" />
    <AttributeType name="CourseName" />
 
    <attribute type="CourseID" />
    <attribute type="CourseName" />

    <AttributeType name="StudentIDList" dt:type="idrefs" />
    <attribute type="StudentIDList" sql:relation="Enrollment" sql:field="StudentID" >
        <sql:relationship
                key-relation="Course"
                key="CourseID"
                foreign-relation="Enrollment"
                foreign-key="CourseID" />
    </attribute>

  </ElementType>
  <ElementType name="Student" sql:relation="Student">
    <AttributeType name="StudentID" dt:type="id" />
     <AttributeType name="LastName" />

    <attribute type="StudentID" />
    <attribute type="LastName" />

    <AttributeType name="EnrolledIn" dt:type="idrefs" />
    <attribute type="EnrolledIn" sql:relation="Enrollment" sql:field="CourseID" >
        <sql:relationship
                key-relation="Student"
                key="StudentID"
                foreign-relation="Enrollment"
                foreign-key="StudentID" />
    </attribute>

    <element type="Enrollment" sql:relation="Enrollment" >
        <sql:relationship key-relation="Student"
                          key="StudentID"
                          foreign-relation="Enrollment"
                          foreign-key="StudentID" />
    </element>
  </ElementType>

</Schema>

Weitere Beispiele für Updategrams, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines Zuordnungsschemas mit Anmerkungen in einem Updategram (SQLXML 4.0).

Siehe auch

Verweis

Sicherheitsüberlegungen zu Updategrams (SQLXML 4.0)