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.
Sie können eine Datenbank in Microsoft SQL Server aus einem vorhandenen XML-Dokument mithilfe eines Aktualisierungsdiagramms oder der OPENXML-Transact-SQL-Funktion ändern (einfügen, aktualisieren oder löschen).
Die OPENXML-Funktion ändert eine Datenbank, indem das vorhandene XML-Dokument gelöscht und ein Rowset bereitgestellt wird, das an eine INSERT-, UPDATE- oder DELETE-Anweisung übergeben werden kann. Mit OPENXML werden Vorgänge direkt für die Datenbanktabellen ausgeführt. Daher ist OPENXML am besten geeignet, wo Rowset-Anbieter, z. B. eine Tabelle, als Quelle angezeigt werden können.
Wie OPENXML können Sie mit einem Updatediagramm Daten in die Datenbank einfügen, aktualisieren oder löschen. Ein Updategram funktioniert jedoch mit den XML-Ansichten, die vom kommentierten XSD-Schema (oder einem XDR)-Schema bereitgestellt werden; Beispielsweise werden die Updates auf die XML-Ansicht angewendet, die vom Zuordnungsschema bereitgestellt wird. Das Zuordnungsschema wiederum verfügt über die erforderlichen Informationen, um XML-Elemente und Attribute den entsprechenden Datenbanktabellen und -spalten zuzuordnen. Das Updategram verwendet diese Zuordnungsinformationen, um die Datenbanktabellen und -spalten zu aktualisieren.
Hinweis
In dieser Dokumentation wird davon ausgegangen, dass Sie mit der Unterstützung von Vorlagen und Zuordnungsschemas in SQL Server vertraut sind. Weitere Informationen finden Sie in der Einführung in kommentierte XSD-Schemas (SQLXML 4.0). Ältere Anwendungen, die XDR verwenden, finden Sie unter "XDR-Schemas mit Anmerkungen" (veraltet in SQLXML 4.0).
Erforderliche Namespaces im Updategram
Die Schlüsselwörter in einem Aktualisierungsdiagramm, z <. B. Synchronisierung>, <vorher> und <nachher>, sind im urn:schemas-microsoft-com:xml-updategram Namespace vorhanden. Das verwendete Namespacepräfix ist beliebig. In dieser Dokumentation bezeichnet das updg Präfix den updategram Namespace.
Überprüfen der Syntax
Ein Updatediagramm ist eine Vorlage mit <Synchronisierung>, <vor> und <nach> Blöcken, die die Syntax des Updatediagramms bilden. Der folgende Code zeigt diese Syntax in ihrer einfachsten Form:
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >
<updg:before>
...
</updg:before>
<updg:after>
...
</updg:after>
</updg:sync>
</ROOT>
Die folgenden Definitionen beschreiben die Rolle der einzelnen Blöcke:
<vor>
Identifiziert den vorhandenen Zustand (auch als "der Vorzustand" bezeichnet) der Datensatzinstanz.
<nach>
Gibt den neuen Zustand an, in den Daten geändert werden sollen.
<synchronisieren>
Enthält die <Vor> - und <Nachher-Blöcke> . Ein <Synchronisierungsblock> kann mehrere Sätze von <vor> und <nach> Blöcken enthalten. Wenn mehrere Blöcke vor<> und <nach> Blöcken vorhanden sind, müssen diese Blöcke (auch wenn sie leer sind) als Paare angegeben werden. Darüber hinaus kann ein Updatediagramm mehrere <Synchronisierungsblocks> aufweisen. Jeder <Synchronisierungsblock> ist eine Transaktionseinheit (was bedeutet, dass entweder alles im <Synchronisierungsblock> erledigt wird oder nichts erledigt wird). Wenn Sie mehrere <Synchronisierungsblöcke> in einem Updategramm angeben, wirkt sich der Fehler eines <Synchronisierungsblocks> nicht auf die anderen <Synchronisierungsblöcke> aus.
Ob ein Updategram löscht, einfügt oder eine Datensatzinstanz aktualisiert, hängt vom Inhalt der <Vor> - und <Nach-Blöcke> ab:
Wenn eine Datensatzinstanz nur im <Vorblock> ohne entsprechende Instanz im <After-Block> angezeigt wird, führt das Updategram einen Löschvorgang aus.
Wenn eine Datensatzinstanz nur im <After-Block> ohne entsprechende Instanz im <vorherigen> Block angezeigt wird, handelt es sich um einen Einfügevorgang.
Wenn eine Datensatzinstanz im <vorherigen> Block angezeigt wird und eine entsprechende Instanz im <After-Block> aufweist, handelt es sich um einen Aktualisierungsvorgang. In diesem Fall aktualisiert das Updategram die Datensatzinstanz auf die Werte, die <im After-Block> angegeben sind.
Angeben eines Zuordnungsschemas im Updategram
In einem Updategram kann die XML-Abstraktion, die von einem Zuordnungsschema bereitgestellt wird (sowohl XSD- als auch XDR-Schemas unterstützt) implizit oder explizit sein (d. h. ein Updategramm kann mit oder ohne ein angegebenes Zuordnungsschema funktionieren). Wenn Sie kein Zuordnungsschema angeben, geht das Updategram von einer impliziten Zuordnung (standardzuordnung) aus, wobei jedes Element im <Vorblock> oder <nach> dem Block einer Tabelle zugeordnet ist und das untergeordnete Element oder Attribut jedes Elements einer Spalte in der Datenbank zugeordnet ist. Wenn Sie explizit ein Zuordnungsschema angeben, müssen die Elemente und Attribute im Updategram mit den Elementen und Attributen im Zuordnungsschema übereinstimmen.
Implizite Zuordnung (Standard)
In den meisten Fällen erfordert ein Updatediagramm, das einfache Updates ausführt, möglicherweise kein Zuordnungsschema. In diesem Fall basiert das Updategram auf dem Standardzuordnungsschema.
Das folgende Updategram veranschaulicht die implizite Zuordnung. In diesem Beispiel fügt das Updatediagramm einen neuen Kunden in die Tabelle "Sales.Customer" ein. Da dieses Updategram implizite Zuordnung verwendet, wird das <Element "Sales.Customer> " der Tabelle "Sales.Customer" zugeordnet, und die Attribute "CustomerID" und "SalesPersonID" werden den entsprechenden Spalten in der Tabelle "Sales.Customer" zugeordnet.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Sales.Customer CustomerID="1" SalesPersonID="277" />
</updg:after>
</updg:sync>
</ROOT>
Explizite Zuordnung
Wenn Sie ein Zuordnungsschema (entweder XSD oder XDR) angeben, verwendet das Updatediagramm das Schema, um die Datenbanktabellen und -spalten zu bestimmen, die aktualisiert werden sollen.
Wenn das Updategram eine komplexe Aktualisierung durchführt (z. B. Das Einfügen von Datensätzen in mehrere Tabellen auf der Grundlage der beziehung zwischen übergeordneten und untergeordneten Elementen, die im Zuordnungsschema angegeben ist), müssen Sie das Zuordnungsschema explizit mithilfe des mapping-schema Attributs bereitstellen, mit dem das Updatediagramm ausgeführt wird.
Da es sich bei einem Updategram um eine Vorlage handelt, ist der für das Zuordnungsschema im Updategram angegebene Pfad relativ zum Speicherort der Vorlagendatei (relativ zum Speicherort des Aktualisierungsdiagramms). Weitere Informationen finden Sie unter Angeben eines kommentierten Zuordnungsschemas in einem Updategram (SQLXML 4.0).For more information, see Specifying an Annotated Mapping Schema in an Updategram (SQLXML 4.0).
Elementorientierte und attributorientierte Zuordnung in Updategrams
Bei der Standardzuordnung (wenn das Zuordnungsschema nicht im Updatediagramm angegeben ist), werden die Updategrammelemente Tabellen und den untergeordneten Elementen (im Fall einer elementzentrierten Zuordnung) und den Attributen (im Fall einer attributorientierten Zuordnung) Spalten zugeordnet.
Elementorientierte Zuordnung
In einem elementzentrierten Aktualisierungsdiagramm enthält ein Element untergeordnete Elemente, die die Eigenschaften des Elements kennzeichnen. Als Beispiel beziehen Sie sich auf das folgende Updategram. Das <Element Person.Contact> enthält die untergeordneten Elemente **<FirstName>**und <LastName> . Diese untergeordneten Elemente sind Eigenschaften des <Person.Contact-Elements> .
Da dieses Updategram kein Zuordnungsschema angibt, verwendet das Updatediagramm implizite Zuordnung, wobei das <Element "Person.Contact> " der Tabelle "Person.Contact" und den untergeordneten Elementen den Spalten "Vorname" und "Nachname" zugeordnet ist.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:after>
<Person.Contact>
<FirstName>Catherine</FirstName>
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
Attributorientierte Zuordnung
In einer attributorientierten Zuordnung weisen die Elemente Attribute auf. Das folgende Updategram verwendet attributorientierte Zuordnung. In diesem Beispiel besteht das <Element "Person.Contact> " aus den Attributen "FirstName " und "LastName ". Diese Attribute sind die Eigenschaften des <Person.Contact-Elements> . Wie im vorherigen Beispiel gibt dieses Updatediagramm kein Zuordnungsschema an. Daher basiert es auf der impliziten Zuordnung, um das <Element "Person.Contact> " der Tabelle "Person.Contact" und den Attributen des Elements den entsprechenden Spalten in der Tabelle zuzuordnen.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" LastName="Abel" />
</updg:after>
</updg:sync>
</ROOT>
Verwenden von elementzentrierter und attributorientierter Zuordnung
Sie können eine Mischung aus elementzentrierter und attributorientierter Zuordnung angeben, wie im folgenden Updategram dargestellt. Beachten Sie, dass das <Person.Contact-Element> sowohl ein Attribut als auch ein untergeordnetes Element enthält. Außerdem basiert dieses Updategram auf der impliziten Zuordnung. Daher werden das Attribut "FirstName " und das <untergeordnete Element "LastName> " den entsprechenden Spalten in der Tabelle "Person.Contact" zugeordnet.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync >
<updg:before>
</updg:before>
<updg:after>
<Person.Contact FirstName="Catherine" >
<LastName>Abel</LastName>
</Person.Contact>
</updg:after>
</updg:sync>
</ROOT>
Arbeiten mit gültigen Zeichen in SQL Server, aber nicht gültig in XML
In SQL Server können Tabellennamen ein Leerzeichen enthalten. Dieser Tabellennametyp ist jedoch in XML ungültig.
Um Zeichen zu codieren, die gültige SQL Server-Bezeichner sind, aber keine gültigen XML-Bezeichner sind, verwenden Sie "__xHHHH__" als Codierungswert, wobei HHHH für den vierstelligen hexadezimalen UCS-2-Code für das Zeichen in der wichtigsten Bit-ersten Reihenfolge steht. Bei Verwendung dieses Codierungsschemas wird ein Leerzeichen durch x0020 ersetzt (der vierstellige Hexadezimalcode für ein Leerzeichen); Daher wird der Tabellenname [Bestelldetails] in SQL Server in XML _x005B_Order_x0020_Details_x005D_.
Ebenso müssen Sie möglicherweise dreiteilige Elementnamen angeben, z <. B. [datenbank].[ besitzer]. [Tabelle]>. Da die eckigen Zeichen ([ und ]) in XML ungültig sind, müssen Sie dies als <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>angeben, wobei _x005B_ die Codierung für die linke Klammer ([) ist und _x005D_ die Codierung für die rechte Klammer (]) ist.
Ausführen von Updategrammen
Da es sich bei einem Updatediagramm um eine Vorlage handelt, gelten alle Verarbeitungsmechanismen einer Vorlage für das Updategramm. Für SQLXML 4.0 können Sie ein Updatediagramm auf eine der folgenden Arten ausführen:
Durch Übermitteln in einem ADO-Befehl.
Durch Übermitteln als OLE DB-Befehl.