Freigeben über


Einfügen von Daten mithilfe von XML-Updatediagrammen (SQLXML 4.0)

Gilt für:SQL ServerAzure SQL-Datenbank

Ein Aktualisierungsdiagramm gibt einen Einfügevorgang an, wenn eine Datensatzinstanz im <after> Block, aber nicht im entsprechenden <before> Block angezeigt wird. In diesem Fall fügt das Updategram 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>

<before>-Block

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

<after>-Block

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

Wenn der <after> Block keinen Wert für eine bestimmte Spalte angibt, 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 keine expliziten Werte für diese Spalte an und weist stattdessen dieser Spalte den SQL Server-Standardwert (sofern angegeben) zu. Wenn kein SQL Server-Standardwert vorhanden ist und die Spalte einen NULL Wert akzeptiert, legt das Updategram den Spaltenwert auf NULL. Wenn die Spalte keinen Standardwert aufweist oder einen NULL Wert akzeptiert, schlägt der Befehl fehl, und das Updatediagramm 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 IDENTITYSpalte vom Typ -Typ hinzugefügt wird.

updg:id-Attribut

Wenn das Updategram nur Datensätze einfügt, erfordert updg:id das Updategram das Attribut nicht. Weitere Informationen updg:idfinden Sie unter Aktualisieren von Daten mithilfe von XML-Updategrams (SQLXML 4.0).

updg:at-identity-Attribut

Wenn ein Updategram einen Datensatz in eine Tabelle mit einer IDENTITYSpalte vom Typ "-type" einfü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. Beim Ausführen 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 für den gesamten <sync> Block, in dem er angegeben ist. Sie können diesen Wert an einer beliebigen Stelle im <sync> Block 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, sollten Sie Folgendes in Betracht ziehen:

  • 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 AdventureWorks2025-Beispieldatenbank. Alle Updates werden für die Tabellen in dieser Datenbank übernommen.

A. Einfügen eines Datensatzes mithilfe eines Aktualisierungsdiagramms

Dieses attributorientierte Aktualisierungsdiagramm fügt einen Datensatz in die Tabelle in der HumanResources.EmployeeAdventureWorks2025 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 AdventureWorks2025-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. Die Abteilungs-ID ist eine IDENTITYSpalte vom Typ "-type". 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>

Testen einer XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen MyUpdategram.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen der Vorlage.

    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 Aktualisierungsdiagramms

Dieses Updategram fügt der Tabelle zwei neue Schichtdatensätze hinzu HumanResources.Shift . Das Updategram gibt den optionalen <before> Block 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>

Testen einer XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen Updategram-AddShifts.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen der Vorlage.

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

Eine weitere Version dieses Beispiels ist ein Updatediagramm, das zwei separate <after> Blöcke 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 ungü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, als Codierungswert codiert _xHHHH_ werden können, wobei HHHH der vierstellige hexadezimale UCS-2-Code für das Zeichen in der wichtigsten Bit-first-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 entsprechend _x005B_ codieren._x005D_ (Wenn Sie ein Zuordnungsschema verwenden, können Sie Elementnamen angeben, die keine gü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 Dollarzeichen ($) 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 entweder dt:type="fixed.14.4" oder sql:datatype="money"markiert 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.

Testen einer XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen UpdategramSpacesInTableName.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen der Vorlage.

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

D: Verwenden des At-Identity-Attributs zum Abrufen des Werts, der in die Spalte "IDENTITY"-Typ eingefügt wurde

Das folgende Updatediagramm fügt zwei Datensätze ein: eine in der Sales.SalesOrderHeader Tabelle und eine andere in der Sales.SalesOrderDetail Tabelle.

Zuerst fügt das Updatediagramm der Sales.SalesOrderHeader Tabelle einen Datensatz hinzu. In dieser Tabelle ist die Spalte "SalesOrderID" eine IDENTITYSpalte vom Typ "-type". 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 Updategram bezeichnet diese at-identity Variable dann als Wert des Attributs SalesOrderID im <Element Sales.SalesOrderDetail> .

<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 updg:returnid Attribut verwenden. Das folgende Beispiel ist 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 ähnlich wie im folgenden Beispiel zurück, das den Identitätswert (den generierten Wert der ShiftID-Spalte, die für die Tabellenidentität verwendet wird) enthält, die generiert wurde:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>4</x>
    <y>5</y>
  </returnid>
</ROOT>

Testen einer XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen Updategram-returnId.xml.

  2. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen der Vorlage.

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

E. Verwenden des updg:guid Attributs zum Generieren eines eindeutigen Werts

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 updg:guid Attributs.

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

Testen des Updategramms

  1. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen 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) zum Ausführen der Vorlage.

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

F. Angeben eines Schemas in einem Updatediagramm

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 OrderID Attributen besteht EmployeeID . Um das Schema interessanter zu gestalten, wird dem EmployeeID Attribut ein Standardwert zugewiesen. Ein Updategram verwendet den Standardwert eines Attributs nur für Einfügevorgänge, und nur dann, wenn das Updategram dieses Attribut nicht 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 OrderType-Attributwert 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).

Testen des Updategramms

  1. Erstellen Sie diese Tabelle in der tempdb Datenbank:

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

  3. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei wie CustOrderUpdategram.xml im gleichen Ordner, der im vorherigen Schritt verwendet wird.

  4. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen des Updategramms.

    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 xsi:nil-Attributs zum Einfügen von Nullwerten in eine Spalte

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-Attribut nillable 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 für das nillable="true" Element an<fname>. 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 für das xsi:nil Element im <fname> Block an<after>. Wenn dieses Updategram ausgeführt wird, wird daher ein Wert NULL für die first_name Spalte in der Tabelle eingefügt.

Testen des Updategramms

  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 vorherige Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen StudentSchema.xml.

  3. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei wie StudentUpdategram.xml im gleichen Ordner, der im vorherigen Schritt zum Speichern StudentSchema.xmlverwendet wurde.

  4. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen des Updategramms.

    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 Sie Elemente haben, die zu einem Namespace gehören, der im selben Element im Updategram deklariert ist. 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 UpdateGram-ElementHavingNamespace.xml Element im folgenden Updategram (<Order>) 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, 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>

Testen des Updategramms

  1. Kopieren Sie das vorherige Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen XSD-ElementHavingNamespace.xml.

  2. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei wie Updategram-ElementHavingNamespace.xml im selben Ordner, der zum Speichern XSD-ElementHavingnamespace.xmlverwendet wird.

  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen des Updategramms.

    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

Sie können Aktualisierungsdiagramme verwenden, um Daten einzufügen und zu aktualisieren, die in XML-Datentypspalten gespeichert sind, mit den folgenden Überlegungen:

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

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

Beispielsweise aktualisiert das SampleUpdateGram.xml Element im folgenden Updategram (<Desc>) die Spalte "ProductDescription" in der Tabelle "Production>productModel" in der AdventureWorks2025 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 href="ProductDescription.xsl" type="text/xsl" e="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>Aluminum 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 Updatediagramm bezieht sich auf das folgende kommentierte XSD-Schema (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>
Testen des Updategramms
  1. Kopieren Sie das vorherige Schema, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei unter dem Namen 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. Wenn kein Schema bereitgestellt wird, gibt SQLXML einen Fehler zurück, der angibt, dass eine der Spalten in der Tabelle fehlt.

  2. Kopieren Sie das vorherige Updategramm, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei wie SampleUpdategram.xml im selben Ordner, der zum Speichern SampleSchema.xmlverwendet wird.

  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs) zum Ausführen des Updategramms.

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