Teilen über


Einfügen von Daten mit XML-Updategrams (SQLXML 4.0)

Gilt für: SQL Server Azure SQL-Datenbank

Ein Updategram gibt einen Einfügevorgang an, wenn eine Datensatzinstanz im <After-Block>, aber nicht im entsprechenden <vor> dem Block angezeigt wird. In diesem Fall fügt das Updatediagramm den Datensatz in den <After-Block> in die Datenbank ein.

Dies ist das Updategramformat für einen Einfügevorgang:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema="SampleSchema.xml"]  >  
   [<updg:before>  
   </updg:before>]  
    <updg:after [updg:returnid="x y ...] >  
       <ElementName [updg:id="value"]   
                   [updg:at-identity="x"]   
                   [updg:guid="y"]  
                   attribute="value"   
                   attribute="value"  
                   ...  
       />  
      [<ElementName .../>... ]  
    </updg:after>  
  </updg:sync>  
</ROOT>  

<vor> Blockierung

Der <Before-Block> kann für einen Einfügevorgang weggelassen werden. Wenn das optionale Zuordnungsschema-Attribut nicht angegeben ist, ordnet der< im Updategram angegebene Elementname> einer Datenbanktabelle und den untergeordneten Elementen oder Attributen spalten in der Tabelle zu.

<nach> Blockierung

Sie können einen oder mehrere Datensätze im <After-Block> angeben.

Wenn der <After-Block> keinen Wert für eine bestimmte Spalte liefert, verwendet das Updatediagramm den Standardwert, der im kommentierten Schema angegeben ist (wenn ein Schema angegeben wurde). Wenn das Schema keinen Standardwert für die Spalte angibt, gibt das Updatediagramm keinen expliziten Wert für diese Spalte an und weist stattdessen dieser Spalte den Standardwert von Microsoft SQL Server (sofern angegeben) zu. Wenn kein SQL Server-Standardwert vorhanden ist und die Spalte einen NULL-Wert akzeptiert, legt das Updatediagramm den Spaltenwert auf NULL fest. Wenn die Spalte weder einen Standardwert besitzt, noch einen NULL-Wert akzeptiert, schlägt der Befehl fehl, und das Updategram gibt einen Fehler zurück. Das optionale updg:returnid-Attribut wird verwendet, um den Identitätswert zurückzugeben, der vom System generiert wird, wenn ein Datensatz in einer Tabelle mit einer IDENTITY-Typ-Spalte hinzugefügt wird.

updg:id-Attribut

Wenn das Updategram nur Datensätze einfügt, erfordert das Updategram nicht das updg:id-Attribut . Weitere Informationen zu updg:id finden Sie unter Aktualisieren von Daten mithilfe von XML-Updategrams (SQLXML 4.0).For more information about updg:id, see Updating Data Using XML Updategrams (SQLXML 4.0).

updg:at-identity-Attribut

Wenn ein Updategram einen Datensatz in eine Tabelle einfügt, die über eine IDENTITY-Typ-Spalte verfügt, kann das Updategram den vom System zugewiesenen Wert mithilfe des optionalen updg:at-identity-Attributs erfassen. Das Updategram kann dann diesen Wert in nachfolgenden Vorgängen verwenden. Bei der Ausführung des Updategramms können Sie den Identitätswert zurückgeben, der durch Angeben des updg:returnid-Attributs generiert wird.

updg:guid-Attribut

Das updg:guid-Attribut ist ein optionales Attribut, das einen global eindeutigen Bezeichner generiert. Dieser Wert verbleibt im Bereich des gesamten <Synchronisierungsblocks> , in dem er angegeben ist. Sie können diesen Wert an beliebiger Stelle im Synchronisierungsblock <> verwenden. Das Attribut ruft die NEWGUID()SQL Server-Funktion auf, um den eindeutigen Bezeichner zu generieren.

Beispiele

Zum Erstellen von Arbeitsbeispielen mit den folgenden Beispielen müssen Sie die anforderungen erfüllen, die in "Requirements for Running SQLXML Examples" angegeben sind.

Bevor Sie die Updategrammbeispiele 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 Beispiele verwenden die AdventureWorks2022-Beispieldatenbank. Alle Updates werden für die Tabellen in dieser Datenbank übernommen.

A. Einfügen eines Datensatzes mithilfe eines Updategrams

Dieses attributzentrierte Updategram fügt einen Datensatz in die HumanResources.Employee-Tabelle in der AdventureWorks2022-Datenbank ein.

In diesem Beispiel gibt das Updategram kein Zuordnungsschema an. Daher verwendet das Updategram die Standardzuordnung, in der der Elementname einem Tabellennamen und die untergeordneten Elemente oder Attribute den Spalten in dieser Tabelle zugeordnet werden.

Das AdventureWorks2022-Schema für die HumanResources.Department-Tabelle erzwingt eine NOT NULL-Einschränkung für alle Spalten. Daher muss das Updategram für alle Spalten angegebene Werte enthalten. DepartmentID ist eine Spalte vom Typ IDENTITY. Daher werden keine Werte dafür angegeben.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name="New Product Research"   
            GroupName="Research and Development"   
            ModifiedDate="2010-08-31"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen MyUpdategram.xml.

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

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

In einer elementzentrierten Zuordnung sieht das Updategram aus wie folgt:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department>  
            <Name> New Product Research </Name>  
            <GroupName> Research and Development </GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Im gemischten Modus (elementzentriert und attributzentriert) kann ein Element sowohl Attribute als auch Unterelemente aufweisen, wie in diesem Updategram gezeigt:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name=" New Product Research "   
            <GroupName>Research and Development</GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

B. Einfügen mehrerer Datensätze mithilfe eines Updategrams

Dieses Updategram fügt der HumanResources.Shift-Tabelle zwei neue Schichtdatensätze hinzu. Das Updategram gibt den optionalen <Vorblock> nicht an.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen Updategram-AddShifts.xml.

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

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

Eine andere Version dieses Beispiels ist ein Updatediagramm, das zwei separate <Nachblöcken> anstelle eines Blocks verwendet, um die beiden Mitarbeiter einzufügen. Dies ist gültig und kann wie folgt codiert werden:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after >  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

C. Arbeiten mit gültigen SQL Server-Zeichen, die in XML nicht gültig sind

In SQL Server können Tabellennamen ein Leerzeichen enthalten, z. B. die Tabelle "Bestelldetails" in der Northwind-Datenbank. Dies ist jedoch in XML-Zeichen, die gültige SQL Server-Bezeichner, aber keine gültigen XML-Bezeichner sind, mithilfe von "__xHHHH__" als Codierungswert codiert werden können, wobei HHHH für den vierstelligen hexadezimalen UCS-2-Code für das Zeichen in der wichtigsten Bit-ersten Reihenfolge steht.

Hinweis

Für dieses Beispiel wird die Northwind-Datenbank verwendet. Sie können die Northwind-Datenbank mithilfe eines SQL-Skripts installieren, das von dieser Microsoft-Website heruntergeladen werden kann.

Außerdem muss der Elementname in eckige Klammern ([ ]) eingeschlossen werden. Da die Zeichen [und] in XML nicht gültig sind, müssen Sie sie als _x005B_ bzw. _x005D_ codieren. (Wenn Sie ein Zuordnungsschema verwenden, können Sie Elementnamen angeben, die keine ungültigen Zeichen enthalten, z. B. Leerzeichen. Das Zuordnungsschema führt die erforderliche Zuordnung durch; Daher müssen Sie diese Zeichen nicht codieren).

Dieses Updategram fügt der Order Details-Tabelle der Northwind-Datenbank einen Datensatz hinzu:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <_x005B_Order_x0020_Details_x005D_ OrderID="1"  
            ProductID="11"  
            UnitPrice="$1.0"  
            Quantity="1"  
            Discount="0.0" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Die Spalte "Einzelpreis" in der Tabelle "Bestelldetails" weist den Geldtyp auf. Um die entsprechende Typkonvertierung (von einem Zeichenfolgentyp auf einen Geldtyp ) anzuwenden, muss das Dollarzeichenzeichen ($) als Teil des Werts hinzugefügt werden. Wenn das Updategram kein Zuordnungsschema angibt, wird das erste Zeichen des Zeichenfolgenwerts ausgewertet. Wenn das erste Zeichen ein Dollarzeichen ($) ist, wird die entsprechende Konvertierung angewendet.

Wenn das Updategram für ein Zuordnungsschema angegeben wird, bei dem die Spalte entsprechend als dt:type="fixed.14.4" oder sql:datatype="money" gekennzeichnet ist, ist das Dollarzeichen ($) nicht erforderlich und die Konvertierung wird von der Zuordnung verarbeitet. Dies ist die empfohlene Methode, um sicherzustellen, dass die richtige Typkonvertierung stattfindet.

So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UpdategramSpacesInTableName.xml.

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

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

D: Verwenden des at-identity-Attributs, um den in die Spalte vom Typ IDENTITY eingefügten Wert abzurufen

Das folgende Updategram fügt zwei Datensätze ein: einen in die Sales.SalesOrderHeader-Tabelle und einen in die Sales.SalesOrderDetail-Tabelle.

Zuerst fügt das Updategram der Sales.SalesOrderHeader-Tabelle einen Datensatz hinzu. In dieser Tabelle ist SalesOrderID eine Spalte vom Typ IDENTITY. Wenn Sie diesen Datensatz der Tabelle hinzufügen, verwendet das Updategram daher das At-Identity-Attribut , um den zugewiesenen SalesOrderID-Wert als "x" (ein Platzhalterwert) zu erfassen. Das Updategam gibt dann diese At-Identity-Variable als Wert des SalesOrderID-Attributs im <Sales.SalesOrderDetail-Element> an.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
   <Sales.SalesOrderHeader updg:at-identity="x"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00001111-2222-3333-4444-556677889900"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
      <Sales.SalesOrderDetail SalesOrderID="x"  
                LineNumber="1"  
                OrderQty="1"  
                ProductID="776"  
                SpecialOfferID="1"  
                UnitPrice="2429.9928"  
                UnitPriceDiscount="0.00"  
                rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  
                ModifiedDate="2001-07-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Wenn Sie den Vom updg:at-identity-Attribut generierten Identitätswert zurückgeben möchten, können Sie das attribut updg:returnid verwenden. Es folgt ein überarbeitetes Updategram, das diesen Identitätswert zurückgibt. (Dieses Updategram fügt zwei Order-Datensätze und zwei Order Detail-Datensätze hinzu, um das Beispiel ein bisschen zu komplizieren.)

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync>  
  <updg:before>  
  </updg:before>  
  <updg:after updg:returnid="x y" >  
       <HumanResources.Shift updg:at-identity="x" Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift updg:at-identity="y" Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
  </updg:after>  
 </updg:sync>  
</ROOT>  

Wenn das Updategram ausgeführt wird, gibt es Ergebnisse wie die folgenden zurück, unter anderem den Identitätswert (den generierten Wert der für Tabellenidentität verwendeten ShiftID-Spalte):

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">   
  <returnid>   
    <x>4</x>   
    <y>5</y>   
  </returnid>   
</ROOT>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen Updategram-returnId.xml.

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

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

E. Verwenden des updg:guid-Attributs, um einen eindeutigen Wert zu generieren

In diesem Beispiel fügt das Updategram einen Datensatz in die Tabellen Cust und CustOrder ein. Außerdem generiert das Updategram einen eindeutigen Wert für das CustomerID-Attribut mithilfe des attributs updg:guid .

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after updg:returnid="x" >  
      <Cust updg:guid="x" >  
         <CustID>x</CustID>  
         <LastName>Fuller</LastName>  
      </Cust>  
      <CustOrder>  
         <CustID>x</CustID>  
         <OrderID>1</OrderID>  
      </CustOrder>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Das Updategram gibt das Returnid-Attribut an. Als Ergebnis wird der generierte GUID zurückgegeben:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <returnid>  
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>   
  </returnid>  
</ROOT>  
So testen Sie das Updategram
  1. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen Updategram-GenerateGuid.xml.

  2. Erstellen Sie die folgenden Tabellen:

    USE tempdb  
    CREATE TABLE Cust (CustID uniqueidentifier, LastName varchar(20))  
    CREATE TABLE CustOrder (CustID uniqueidentifier, OrderID int)  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

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

F. Angeben eines Schemas in einem Updategram

Das Updategram in diesem Beispiel fügt einen Datensatz in die folgende Tabelle ein:

CustOrder(OrderID, EmployeeID, OrderType)  

In diesem Updategram wird ein XSD-Schema angegeben (d. h. es gibt keine Standardzuordnung von Updategramelementen und -attributen). Die erforderliche Zuordnung der Elemente und Attribute zu den Datenbanktabellen und -spalten erfolgt durch das Zuordnungsschema.

Das folgende Schema (CustOrderSchema.xml) beschreibt ein <CustOrder-Element> , das aus den Attributen OrderID und EmployeeID besteht. Um das Schema interessanter zu gestalten, wird dem EmployeeID-Attribut ein Standardwert zugewiesen. Ein Updategram verwendet den Standardwert eines Attributs nur bei Einfügevorgängen, und auch dann nur, wenn das Updategram kein anderes Attribut angibt.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="CustOrder" >  
   <xsd:complexType>  
        <xsd:attribute name="OrderID"     type="xsd:integer" />   
        <xsd:attribute name="EmployeeID"  type="xsd:integer" />  
        <xsd:attribute name="OrderType  " type="xsd:integer" default="1"/>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Dieses Updategram fügt einen Datensatz in die CustOrder-Tabelle ein. Das Updategram gibt nur die Attributwerte für OrderID und EmployeeID an. Der Attributwert für OrderType wird nicht angegeben. Daher verwendet das Updategram den Standardwert des EmployeeID-Attributs, das im vorhergehenden Schema angegeben ist.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
             xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync mapping-schema='CustOrderSchema.xml'>  
<updg:after>  
       <CustOrder OrderID="98000" EmployeeID="1" />  
</updg:after>  
</updg:sync>  
</ROOT>  

Weitere Beispiele für Updategramme, die ein Zuordnungsschema angeben, finden Sie unter Angeben eines kommentierten Zuordnungsschemas in einem Updategram (SQLXML 4.0).

So testen Sie das Updategram
  1. Erstellen Sie diese Tabelle in der tempdb-Datenbank :

    USE tempdb  
    CREATE TABLE CustOrder(  
                     OrderID int,   
                     EmployeeID int,   
                     OrderType int)  
    
  2. Kopieren Sie das oben stehende Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen CustOrderSchema.xml.

  3. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei als CustOrderUpdategram.xml in demselben Ordner, den Sie im vorherigen Schritt verwendet haben.

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

Dies ist das entsprechende XDR-Schema:

<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
 <ElementType name="CustOrder" >  
    <AttributeType name="OrderID" />  
    <AttributeType name="EmployeeID" />  
    <AttributeType name="OrderType" default="1" />  
    <attribute type="OrderID"  />  
    <attribute type="EmployeeID" />  
    <attribute type="OrderType" />  
  </ElementType>  
</Schema>  

G. Verwenden des Attributs "xsi:nil", um NULL-Werte in eine Spalte einzufügen

Wenn Sie einen NULL-Wert in die entsprechende Spalte in der Tabelle einfügen möchten, können Sie das xsi:nil-Attribut für ein Element in einem Aktualisierungsdiagramm angeben. Im entsprechenden XSD-Schema muss auch das XSD nillable-Attribut angegeben werden.

Das folgende XSD-Schema ist ein Beispiel dafür:

<?xml version="1.0"?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="Student" sql:relation="Students">  
  <xsd:complexType>  
    <xsd:all>  
      <xsd:element name="fname" sql:field="first_name"   
                                type="xsd:string"   
                                 nillable="true"/>  
    </xsd:all>  
    <xsd:attribute name="SID"   
                        sql:field="StudentID"  
                        type="xsd:ID"/>      
    <xsd:attribute name="lname"       
                        sql:field="last_name"  
                        type="xsd:string"/>  
    <xsd:attribute name="minitial"    
                        sql:field="middle_initial"   
                        type="xsd:string"/>  
    <xsd:attribute name="years"       
                         sql:field="no_of_years"  
                         type="xsd:integer"/>  
  </xsd:complexType>  
 </xsd:element>  
</xsd:schema>  

Das XSD-Schema gibt nillable="true" für das <fname-Element> an. Das folgende Updategram verwendet dieses Schema:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
      xmlns:updg="urn:schemas-microsoft-com:xml-updategram"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  
<updg:sync mapping-schema='StudentSchema.xml'>  
  <updg:before/>  
  <updg:after>  
    <Student SID="S00004" lname="Elmaci" minitial="" years="2">  
      <fname xsi:nil="true">  
    </fname>  
    </Student>  
  </updg:after>  
</updg:sync>  
  
</ROOT>  

Das Updategram gibt "xsi:nil" für das< "fname>"-Element im< After-Block> an. Daher wird beim Ausführen dieses Updategrams für die first_name-Spalte in der Tabelle der Wert NULL eingefügt.

So testen Sie das Updategram
  1. Erstellen Sie die folgende Tabelle in der tempdb-Datenbank :

    USE tempdb  
    CREATE TABLE Students (  
       StudentID char(6)NOT NULL ,  
       first_name varchar(50),  
       last_name varchar(50),  
       middle_initial char(1),  
       no_of_years int NULL)  
    GO  
    
  2. Kopieren Sie das oben stehende Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen StudentSchema.xml.

  3. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei als StudentUpdategram.xml in demselben Ordner, den Sie im vorherigen Schritt zum Speichern der Datei StudentSchema.xml verwendet haben.

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

H. Angeben von Namespaces in einem Updategram

In einem Updategram können Elemente vorhanden sein, die zu einem in demselben Element im Updategram deklarierten Namespace gehören. In diesem Fall muss auch in dem entsprechenden Schema derselbe Namespace deklariert sein, und das Element muss diesem Zielnamespace angehören.

Beispielsweise gehört das Order-Element> im folgenden Updategram (UpdateGram-ElementHavingNamespace.xml) <zu einem im Element deklarierten Namespace.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema='XSD-ElementHavingNameSpace.xml'>  
    <updg:after>  
       <x:Order  xmlns:x="https://server/xyz/schemas/"  
             updg:at-identity="SalesOrderID"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00009999-8888-7777-6666-554433221100"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

In diesem Fall muss auch das Schema den Namespace deklarieren, wie in diesem Schema gezeigt:

Das folgende Schema (XSD-ElementHavingNamespace.xml) zeigt an, wie das entsprechende Element und die entsprechenden Attribute deklariert werden müssen.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:dt="urn:schemas-microsoft-com:datatypes"   
     xmlns:sql="urn:schemas-microsoft-com:mapping-schema"    
     xmlns:x="https://server/xyz/schemas/"   
     targetNamespace="https://server/xyz/schemas/" >  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type"/>  
  <xsd:complexType name="Order_type">  
    <xsd:attribute name="SalesOrderID"  type="xsd:ID"/>  
    <xsd:attribute name="RevisionNumber" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OrderDate" type="xsd:dateTime"/>  
    <xsd:attribute name="DueDate" type="xsd:dateTime"/>  
    <xsd:attribute name="ShipDate" type="xsd:dateTime"/>  
    <xsd:attribute name="Status" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OnlineOrderFlag" type="xsd:boolean"/>  
    <xsd:attribute name="SalesOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="PurchaseOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="AccountNumber" type="xsd:string"/>  
    <xsd:attribute name="CustomerID" type="xsd:int"/>  
    <xsd:attribute name="ContactID" type="xsd:int"/>  
    <xsd:attribute name="SalesPersonID" type="xsd:int"/>  
    <xsd:attribute name="TerritoryID" type="xsd:int"/>  
    <xsd:attribute name="BillToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipMethodID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardApprovalCode" type="xsd:string"/>  
    <xsd:attribute name="CurrencyRateID" type="xsd:int"/>  
    <xsd:attribute name="SubTotal" type="xsd:decimal"/>  
    <xsd:attribute name="TaxAmt" type="xsd:decimal"/>  
    <xsd:attribute name="Freight" type="xsd:decimal"/>  
    <xsd:attribute name="TotalDue" type="xsd:decimal"/>  
    <xsd:attribute name="Comment" type="xsd:string"/>  
    <xsd:attribute name="rowguid" type="xsd:string"/>  
    <xsd:attribute name="ModifiedDate" type="xsd:dateTime"/>  
  </xsd:complexType>  
</xsd:schema>  
So testen Sie das Updategram
  1. Kopieren Sie das oben stehende Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen XSD-ElementHavingNamespace.xml.

  2. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei als Updategram-ElementHavingNamespace.xml in demselben Ordner, den Sie im vorherigen Schritt zum Speichern der Datei XSD-ElementHavingnamespace.xml verwendet 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.

I. Einfügen von Daten in eine XML-Datentypspalte

Der XML-Datentyp wurde in SQL Server 2005 (9.x) eingeführt. Sie können Aktualisierungsdiagramme verwenden, um Daten einzufügen und zu aktualisieren, die in XML-Datentypspalten gespeichert sind, mit den folgenden Bestimmungen:

  • Die XML-Spalte kann nicht zum Identifizieren einer vorhandenen Zeile verwendet werden. Daher kann es nicht in den Updg:before-Abschnitt eines Aktualisierungsdiagramms eingeschlossen werden.

  • Namespaces, die sich im Bereich des in die XML-Spalte eingefügten XML-Fragments befinden, werden beibehalten, und ihre Namespacedeklarationen werden dem oberen Element des eingefügten Fragments hinzugefügt.

Beispielsweise aktualisiert das Desc-Element im folgenden Updategram (SampleUpdateGram.xml) <die Spalte "ProductDescription" in der Tabelle "Production>productModel" in der AdventureWorks2022 Beispieldatenbank.> Das Ergebnis dieses Updategrams ist, dass der XML-Inhalt der Spalte "ProductDescription" mit dem XML-Inhalt des <Desc-Elements> aktualisiert wird.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
    <updg:sync mapping-schema="SampleSchema.xml" >  
       <updg:before>  
<ProductModel ProductModelID="19">  
   <Name>Mountain-100</Name>  
</ProductModel>  
    </updg:before>  
    <updg:after>  
 <ProductModel>  
    <Name>Mountain-100</Name>  
    <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>  
        <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
              xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
              xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures"   
              xmlns:html="http://www.w3.org/1999/xhtml"   
              xmlns="">  
  <p1:Summary>  
     <html:p>Insert Example</html:p>  
  </p1:Summary>  
  <p1:Manufacturer>  
    <p1:Name>AdventureWorks</p1:Name>  
    <p1:Copyright>2002</p1:Copyright>  
    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>  
  </p1:Manufacturer>  
  <p1:Features>These are the product highlights.   
    <wm:Warranty>  
       <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
       <wm:Description>parts and labor</wm:Description>  
    </wm:Warranty>  
    <wm:Maintenance>  
       <wm:NoOfYears>10 years</wm:NoOfYears>  
       <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>  
    </wm:Maintenance>  
    <wf:wheel>High performance wheels.</wf:wheel>  
    <wf:saddle>  
      <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle>  
    <wf:pedal>  
       <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal>  
    <wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>  
    <wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset>  
   </p1:Features>  
   <p1:Picture>  
      <p1:Angle>front</p1:Angle>  
      <p1:Size>small</p1:Size>  
      <p1:ProductPhotoID>118</p1:ProductPhotoID>  
   </p1:Picture>  
   <p1:Specifications> These are the product specifications.  
     <Material>Almuminum Alloy</Material>  
     <Color>Available in most colors</Color>  
     <ProductLine>Mountain bike</ProductLine>  
     <Style>Unisex</Style>  
     <RiderExperience>Advanced to Professional riders</RiderExperience>  
   </p1:Specifications>  
  </p1:ProductDescription>  
 </Desc>  
      </ProductModel>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Das Updategram verweist auf das folgende XSD-Schema mit Anmerkungen (SampleSchema.xml).

<?xml version="1.0" encoding="utf-8" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
           xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">   
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >  
     <xsd:complexType>  
       <xsd:sequence>  
          <xsd:element name="Name" type="xsd:string"></xsd:element>  
          <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">  
           <xsd:complexType>  
            <xsd:sequence>  
              <xsd:element name="ProductDescription">  
                 <xsd:complexType>  
                   <xsd:sequence>  
                     <xsd:element name="Summary" type="xsd:anyType">  
                     </xsd:element>  
                   </xsd:sequence>  
                 </xsd:complexType>  
              </xsd:element>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>   
       </xsd:sequence>  
       <xsd:attribute name="ProductModelID" sql:field="ProductModelID"/>  
     </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
So testen Sie das Updategram
  1. Kopieren Sie das oben stehende Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen XSD-SampleSchema.xml.

    Hinweis

    Da Updategrams die Standardzuordnung unterstützen, gibt es keine Möglichkeit, den Anfang und das Ende des XML-Datentyps zu identifizieren. Dies bedeutet effektiv, dass beim Einfügen oder Aktualisieren von Tabellen mit XML-Datentypspalten ein Zuordnungsschema erforderlich ist. Wird kein Schema bereitgestellt, gibt SQLXML einen Fehler zurück und meldet, dass eine der Spalten in der Tabelle fehlt.

  2. Kopieren Sie das oben stehende Updategram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei als SampleUpdategram.xml in demselben Ordner, den Sie im vorherigen Schritt zum Speichern der Datei SampleSchema.xml verwendet 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 Informationen

Sicherheitsüberlegungen zu Updategramms (SQLXML 4.0)