Teilen über


Einführung in Updategrams (SQLXML 4.0)

Gilt für: SQL Server Azure SQL-Datenbank

Sie können eine Datenbank in Microsoft SQL Server aus einem vorhandenen XML-Dokument mithilfe eines Updategramms 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.

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 Updategram, z<. B. Synchronisierung>,< vorher> und< nachher>, sind im urn:schemas-microsoft-com:xml-updategram-Namespace vorhanden. Sie können ein beliebiges Namespacepräfix verwenden. In dieser Dokumentation zeigt das Updg-Präfix den Updategramnamespace an.

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

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

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

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

<sync>
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 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, 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 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 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 angeben (XSD oder XDR) verwendet das Updategram das Schema um zu bestimmen, welche Datenbanktabellen und -spalten 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 Zuordnungsschema-Attributs bereitstellen, mit dem das Updatediagramm 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 kommentierten Zuordnungsschemas in einem Updategram (SQLXML 4.0).For more information, see Specifying an Annotated Mapping Schema in an 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 <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>  

Attributzentrierte Zuordnung

Die Elemente in einer attributzentrierten Zuordnung verfügen über Attribute. Im folgenden Updategram wird die attributzentrierte Zuordnung verwendet. 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 der elementzentrierten und der attributzentrierten Zuordnung

Sie können eine Mischung elementzentrierter und attributzentrierter Zuordnung angeben, wie im folgenden Updategram dargestellt. Beachten Sie, dass das <Person.Contact-Element> sowohl ein Attribut als auch ein untergeordnetes Element enthält. Für dieses Updategram wird die implizite Zuordnung verwendet. 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>  

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

In SQL Server können Tabellennamen ein Leerzeichen enthalten. Dieser Tabellennamentyp ist in XML jedoch nicht gü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 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

Weitere Informationen

Sicherheitsüberlegungen zu Updategramms (SQLXML 4.0)