Aktualisieren von Daten mit XML-Updategrams (SQLXML 4.0)
Gilt für: SQL Server Azure SQL-Datenbank
Wenn Sie vorhandene Daten aktualisieren, müssen Sie sowohl die Vor>- als <auch die Nachher-Blöcke>< angeben. Die in den <Blöcken vor> und <nach> Blöcken angegebenen Elemente beschreiben die gewünschte Änderung. Das Updategram verwendet die Elemente, die im <vorherigen> Block angegeben sind, um die vorhandenen Datensätze in der Datenbank zu identifizieren. Die entsprechenden Elemente im <After-Block> geben an, wie die Datensätze nach der Ausführung des Aktualisierungsvorgangs aussehen sollen. Aus diesen Informationen erstellt das Updategram eine SQL-Anweisung, die dem nach> dem <Block entspricht. 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< Vorblock> angegebenen Datensätze nach der Anwendung der Updates aussehen sollen.
Das Zuordnungsschema-Attribut identifiziert das Zuordnungsschema, das vom Updatediagramm verwendet werden soll. Wenn das Updategram ein Zuordnungsschema angibt, müssen die in den <Blöcken vor> und nach> Blöcken 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. In der Standardzuordnung ordnet der <im Updategram angegebene Elementname> der Datenbanktabelle und den untergeordneten Elementen oder Attributen den Datenbankspalten zu.
Ein Element im <before-Block> muss nur mit einer Tabellenzeile in der Datenbank übereinstimmen. Wenn das Element entweder mehreren Tabellenzeilen entspricht oder nicht mit einer Tabellenzeile übereinstimmt, gibt das Updatediagramm einen Fehler zurück und bricht den gesamten <Synchronisierungsblock> ab.
Ein Updategramm kann mehrere <Synchronisierungsblöcke> enthalten. Jeder <Synchronisierungsblock> wird als Transaktion behandelt. Jeder <Synchronisierungsblock> kann mehrere <Blöcke vor> und< nach> Blöcken haben. Wenn Sie z. B. zwei der vorhandenen Datensätze aktualisieren, können Sie zwei <Vor>- und <Nachpaare> angeben, eine für jeden Datensatz, der aktualisiert wird.
Verwenden des updg:id-Attributs
Wenn mehrere Elemente in den <Vor>- und <Nach-Blöcken> angegeben werden, verwenden Sie das Updg:id-Attribut, um Zeilen in den <Vor>- und< Nach-Blöcken> zu markieren. Die Verarbeitungslogik verwendet diese Informationen, um zu bestimmen, welcher Datensatz in den Vor-Block-Paaren> mit welchem Datensatz im< After-Block> enthalten ist.<
Das Updg:id-Attribut ist nicht erforderlich (obwohl empfohlen), wenn eine der folgenden Angaben vorhanden ist:
Die Elemente im angegebenen Zuordnungsschema haben das attribut "sql:key-fields " definiert.
Ein oder mehrere bestimmte Werte sind für das Schlüsselfeld oder die Schlüsselfelder im Updategram angegeben.
Wenn beides der Fall ist, verwendet das Updatediagramm die Schlüsselspalten, die in den sql:key-Feldern angegeben sind, um die Elemente in den< Vor>- und< Nach-Blöcken> zu koppeln.
Wenn das Zuordnungsschema keine Schlüsselspalten (mithilfe von sql:key-fields) identifiziert oder wenn das Updategram einen Schlüsselspaltenwert aktualisiert, müssen Sie updg:id angeben.
Die Datensätze, die in den <Vor> - und <Nachher-Blöcken> identifiziert werden, müssen nicht in derselben Reihenfolge vorliegen. Das updg:id-Attribut erzwingt die Zuordnung zwischen den Elementen, die in den< Blöcken vor> und< nachher> angegeben sind.
Wenn Sie ein Element im <vorherigen> Block und nur ein entsprechendes Element im< After-Block> angeben, ist die Verwendung von updg:id nicht erforderlich. Es wird jedoch empfohlen, dass Sie updg:id trotzdem angeben, 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 Updategramme, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines kommentierten Zuordnungsschemas 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 <Vorblock> beschriebene Datensatz stellt den aktuellen Datensatz in der Datenbank dar. Das Updategram verwendet alle spaltenwerte, die <im Before-Block> angegeben sind, um nach dem Datensatz zu suchen. In diesem Updategram stellt der <Before-Block> nur die ContactID-Spalte bereit. Daher verwendet das Updatediagramm nur den Wert, um nach dem 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 stellt der <After-Block> nur den Wert der Nachname-Spalte bereit, da dies der einzige Wert ist, der geändert wird.
So testen Sie das Updategram
Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateLastName.xml.
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 <Blöcken vor> und <nachher.>
<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>
Beachten Sie, wie das updg:id-Attribut die erste Instanz des <HumanResources.Shift-Elements> im <before-Block> mit der zweiten Instanz des <HumanResources.Shift-Elements> im <After-Block> kombiniert.
So testen Sie das Updategram
Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleRecords.xml.
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 mehrerer <Vor>- und <Nachher-Blöcke>
Um Mehrdeutigkeit zu vermeiden, können Sie das Updatediagramm in Beispiel B schreiben, indem Sie mehrere <Vor>- und <Nachher-Blockpaare> verwenden. Das Angeben von <Vor>- und <Nach-Paaren> ist eine Möglichkeit, mehrere Updates mit einem Minimum an Verwirrung anzugeben. Außerdem müssen Sie das updg:id-Attribut nicht verwenden, wenn jeder der <Vor>- und <Nach-Blöcke> höchstens ein Element angibt.
Hinweis
Um ein Paar zu bilden, muss das <Nachtag> unmittelbar dem entsprechenden <Vortag> folgen.
Im folgenden Updategram aktualisiert das erste <Vor- und <Nach-Paar>> den Schichtnamen für die Tagesschicht. 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
Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleBeforeAfter.xml.
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 mehrerer <Synchronisierungsblöcke>
Sie können mehrere <Synchronisierungsblöcke> in einem Updatediagramm angeben. Jeder <angegebene Synchronisierungsblock> ist eine unabhängige Transaktion.
Im folgenden Updategram aktualisiert der erste <Synchronisierungsblock> einen Datensatz in der Tabelle "Sales.Customer". 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 <Synchronisierungsblock> fügt der Tabelle "Sales.SalesOrderHeader" zwei Datensätze hinzu. Für diese Tabelle ist SalesOrderID eine Spalte vom Typ IDENTITY. Daher gibt das Updategram nicht den Wert von SalesOrderID in jedem der <Elemente "Sales.SalesOrderHeader> " an.
Das Angeben mehrerer Synchronisierungsblöcke ist nützlich, da der zweite <Synchronisierungsblock>> (eine Transaktion) datensätze nicht zur Tabelle "Sales.SalesOrderHeader" hinzufügen kann, kann der erste <Synchronisierungsblock> den Kundendatensatz weiterhin in der Tabelle "Sales.Customer" aktualisieren.<
<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
Kopieren Sie die oben stehende Updategramvorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdateMultipleSyncs.xml.
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 Updatediagramm ein Zuordnungsschema mithilfe des Zuordnungsschema-Attributs 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 enthält <Elemente "Customer>",< "Order>" und< "OD>", 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 Updategramm enthält geschachtelte Elemente: ein OD-Element>, das in einem< Order-Element> geschachtelt ist.< 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
Kopieren Sie das oben stehende Zuordnungsschema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdategramMappingSchema.xml.
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.
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 Updategramme, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines kommentierten Zuordnungsschemas 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 eine XML-Ansicht der Tabellen mithilfe der <Elemente "Student>",< "Course>" und "Enrollment>" bereit<. Die IDREFS-Attribute im Zuordnungsschema geben die Beziehung zwischen diesen Elementen an. Das StudentIDList-Attribut für das< Course-Element> ist ein IDREFS-Typ-Attribut, das auf die Spalte StudentID in der Registrierungstabelle verweist. Ebenso ist das Attribut "EnrollmentedIn " für das <Element "Student> " ein IDREFS-Typ-Attribut , das sich auf die Spalte "CourseID" in der Registrierungstabelle bezieht.
<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
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))
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')
Kopieren Sie das oben stehende Zuordnungsschema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema.xml.
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>
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.
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>
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 Updategramme, die Zuordnungsschemas verwenden, finden Sie unter Angeben eines kommentierten Zuordnungsschemas in einem Updategram (SQLXML 4.0).