Freigeben über


Einführung in Updategrams (SQLXML 4.0)

Sie können eine Datenbank in Microsoft SQL Server aus einem vorhandenen XML-Dokument mithilfe eines Updategrams oder der OPENXML-Transact-SQL-Funktion ändern (einfügen, aktualisieren oder löschen).

Die OPENXML-Funktion ändert eine Datenbank durch Aufteilen des vorhandenen XML-Dokuments und Bereitstellen eines Rowsets, das an eine INSERT-, UPDATE- oder DELETE-Anweisung übergeben werden kann. Mit OPENXML werden Operationen direkt für die Datenbanktabellen ausgeführt. Daher eignet sich OPENXML besonders gut, wenn Rowsetanbieter, wie Tabellen, als Quelle auftreten können.

Wie mit OPENXML können Sie mit einem Updategram Daten in der Datenbank einfügen, aktualisieren oder löschen. Ein Updategram wird jedoch für die XML-Sichten verwendet, die vom XSD-Schema (oder einem XDR-Schema) bereitgestellt werden. So werden beispielsweise die Updates auf die vom Zuordnungsschema bereitgestellte XML-Sicht angewendet. Das Zuordnungsschema enthält die erforderlichen Informationen zum Zuordnen von XML-Elementen und -Attributen zu den entsprechenden Datenbanktabellen und -spalten. Das Updategram verwendet diese Zuordnungsinformationen zum Aktualisieren der Datenbanktabellen und -spalten.

HinweisHinweis

Diese Dokumentation setzt voraus, dass Sie mit Vorlagen und der Unterstützung von Zuordnungsschemas in SQL Server vertraut sind. Weitere Informationen finden Sie unter Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0). Ältere Anwendungen, die XDR verwenden, finden Sie unter XDR-Schemas mit Anmerkungen (in SQLXML 4.0 veraltet).

Erforderliche Namespaces im Updategram

Die Schlüsselwörter in einem Updategram, wie z. B. <sync>, <before> und <after>, sind im urn:schemas-microsoft-com:xml-updategram-Namespace vorhanden. Sie können ein beliebiges Namespacepräfix verwenden. In dieser Dokumentation gibt das Präfix updg den Namespace updategram an.

Überprüfen der Syntax

Ein Updategram ist eine Vorlage mit <sync>-, <before>- und <after>-Blöcken, die die Syntax des Updategrams 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>

In den folgenden Definitionen werden die Rollen der einzelnen Blöcke beschrieben:

  • <before>
    Identifiziert den vorhandenen Status (auch als "Vorher-Status" bezeichnet) der Datensatzinstanz.

  • <after>
    Identifiziert den neuen Status, in den Daten geändert werden sollen.

  • <sync>
    Enthält die Blöcke <before> und <after>. Ein <sync>-Block kann mehr als einen Satz aus <before>- und <after>-Blöcken enthalten. Wenn mehr als ein Satz aus <before>- und <after>-Blöcken vorhanden ist, müssen diese Blöcke paarweise angegeben werden (auch wenn sie leer sind). Des Weiteren kann ein Updategram über mehr als einen <sync>-Block verfügen. Jeder <sync>-Block bildet eine Transaktionseinheit (d. h., es wird entweder der gesamte <sync>-Block oder nichts ausgeführt). Wenn Sie mehrere <sync>-Blöcke in einem Updategram angeben, wirkt sich der Ausfall eines <sync>-Blocks nicht auf die anderen <sync>-Blöcke aus.

Ob ein Updategram eine Datensatzinstanz löscht, einfügt oder aktualisiert, hängt vom Inhalt der <before>- und <after>-Blöcke ab:

  • Kommt eine Datensatzinstanz nur im <before>-Block ohne entsprechende Instanz im <after>-Block vor, führt das Updategram einen Löschvorgang durch.

  • Kommt eine Datensatzinstanz nur im <after>-Block ohne entsprechende Instanz im <before>-Block vor, wird ein Einfügevorgang durchgeführt.

  • Wenn eine Datensatzinstanz im <before>-Block vorkommt und über eine entsprechende Instanz im <after>-Block verfügt, handelt es sich um einen Updatevorgang. In diesem Fall aktualisiert das Updategram die im <after>-Block angegebenen Werte der Datensatzinstanz.

Angeben eines Zuordnungsschemas im Updategram

In einem Updategram kann die von einem Zuordnungsschema (sowohl XSD- als auch XDR-Schemas werden unterstützt) bereitgestellte XML-Abstraktion implizit oder explizit sein (d. h., ein Updategram kann mit angegebenem Zuordnungsschema oder ohne angegebenes Zuordnungsschema verwendet werden). Wenn Sie kein Zuordnungsschema angeben, geht das Updategram von einer impliziten Zuordnung (Standardzuordnung) aus, bei der die einzelnen Elemente im <before>-Block oder im <after>-Block einer Tabelle und die untergeordneten Elemente oder Attribute der einzelnen Elemente einer Spalte in der Datenbank zugeordnet werden. Wenn Sie ausdrücklich ein Zuordnungsschema angeben, müssen die Elemente und Attribute im Updategram mit den Elementen und Attributen im Zuordnungsschema übereinstimmen.

Implizite Zuordnung (Standardzuordnung)

Ein Updategram, das einfache Updates durchführt, benötigt in der Regel kein Zuordnungsschema. In diesem Fall verwendet das Updategram das Standardzuordnungsschema.

Das folgende Updategram zeigt eine implizite Zuordnung. In diesem Beispiel fügt das Updategram einen neuen Kunden in die Sales.Customer-Tabelle ein. Da das Updategram eine implizite Zuordnung verwendet, wird das <Sales.Customer>-Element der Sales.Customer-Tabelle und die Attribute CustomerID und SalesPersonID den entsprechenden Spalten in der Sales.Customer-Tabelle 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 angeben (XSD oder XDR) verwendet das Updategram das Schema um zu bestimmen, welche Datenbanktabellen und -spalten aktualisiert werden sollen.

Wenn das Updategram ein komplexes Update durchführt (z. B. Datensätze auf der Grundlage der im Zuordnungsschema angegebenen Über-/Unterordnungsbeziehung in mehrere Tabellen einfügt), müssen Sie das Zuordnungsschema explizit angeben. Verwenden Sie hierzu das mapping-schema-Attribut, für das das Updategram ausgeführt wird.

Da ein Updategram eine Vorlage ist, ist der für das Zuordnungsschema im Updategram angegebene Pfad bezieht sich auf den Speicherort der Vorlagendatei (relativ zum Speicherort des Updategrams). Weitere Informationen finden Sie unter Angeben eines Zuordnungsschemas mit Anmerkungen in einem Updategram (SQLXML 4.0).

Elementzentrierte und attributzentrierte Zuordnung in Updategrams

Bei der Standardzuordnung (wenn im Updategram kein Zuordnungsschema angegeben ist) werden die Updategramelemente Tabellen und die untergeordneten Elemente (bei der elementzentrierten Zuordnung) und die Attribute (bei der attributzentrierten Zuordnung) Spalten zugeordnet.

Elementzentrierte Zuordnung

Ein Element in einem elementzentrierten Updategram enthält untergeordnete Elemente, die die Eigenschaften des Elements angeben. Ein Beispiel finden Sie im folgenden Updategram. Das <Person.Contact>-Element enthält die untergeordneten Elemente <FirstName> und <LastName>. Diese untergeordneten Elemente sind Eigenschaften des <Person.Contact>-Elements.

Da in diesem Updategram kein Zuordnungsschema angegeben ist, verwendet das Updategram die implizite Zuordnung, bei der das <Person.Contact>-Element der Person.Contact-Tabelle zugeordnet wird und die untergeordneten Elemente den Spalten FirstName und LastName zugeordnet werden.

<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>

Attributzentrierte Zuordnung

Die Elemente in einer attributzentrierten Zuordnung verfügen über Attribute. Im folgenden Updategram wird die attributzentrierte Zuordnung verwendet. In diesen Beispiel besteht das <Person.Contact>-Element aus den Attributen FirstName und LastName. Diese Attribute sind die Eigenschaften des <Person.Contact>-Elements. In diesem Updategram ist wie im vorherigen Beispiel kein Zuordnungsschema angegeben. Daher werden das <Person.Contact>-Element der Person.Contact-Tabelle und die Attribute des Elements den entsprechenden Spalten in der Tabelle implizit zugeordnet.

<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 der elementzentrierten und der attributzentrierten Zuordnung

Sie können eine Mischung elementzentrierter und attributzentrierter Zuordnung angeben, wie im folgenden Updategram dargestellt. Das <Person.Contact>-Element enthält sowohl ein Attribut als auch ein untergeordnetes Element. Für dieses Updategram wird die implizite Zuordnung verwendet. Somit werden das FirstName-Attribut und das untergeordnete Element <LastName> den entsprechenden Spalten in der Person.Contact-Tabelle 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>

Verwenden von Zeichen, die in SQL Server gültig sind, in XML jedoch nicht

In SQL Server dürfen Tabellennamen Leerzeichen enthalten. Dieser Tabellennamentyp ist in XML jedoch nicht gültig.

Um Zeichen, die zwar gültige SQL Server-Bezeichner jedoch keine gültigen XML-Bezeichner sind, zu codieren, verwenden Sie '__xHHHH__' als Codierungswert, wobei 'HHHH' für den vierstelligen hexadezimalen UCS-2-Code des signifikantesten Zeichens in einer nach Signifikanz geordneten Bitfolge steht. Wenn Sie dieses Codierungsschema verwenden, wird ein Leerzeichen durch x0020 (vierstelliger Hexadezimalcode für ein Leerzeichen) ersetzt. Somit wird aus dem Tabellennamen [Order Details] in SQL Server in XML _x005B_Order_x0020_Details_x005D_.

Entsprechend kann es vorkommen, dass Sie dreiteilige Elementnamen angeben müssen, wie z. B. <[database].[owner].[table]>. Da die Klammernzeichen ([ und ]) in XML nicht gültig sind, müssen Sie diese als <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_> angeben, wobei _x005B_ die Codierung vür die öffnende Klammer ([) und _x005D_ die Codierung für die schließende Klammer (]) ist.

Ausführen von Updategrams

Da ein Updategram eine Vorlage ist, gelten alle Verarbeitungsmechanismen einer Vorlage auch für ein Updategram. Zum Ausführen eines Updategrams in SQLXML 4.0 können Sie eine der beiden folgenden Möglichkeiten verwenden:

  • Senden des Updategrams in einem ADO-Befehl

  • Senden des Updategrams in einem OLE DB-Befehl

Siehe auch

Verweis

Sicherheitsüberlegungen zu Updategrams (SQLXML 4.0)