Infoga data med XML-uppdateringsgram (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

Ett uppdateringsgram anger en infogningsåtgärd när en postinstans visas i <after> blocket men inte i motsvarande <before> block. I det här fallet infogar updategrammet posten i <after> blocket i databasen.

Det här är uppdateringsgramformatet för en infogningsåtgärd:

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

Blocket <before> kan utelämnas för en infogningsåtgärd. Om det valfria mapping-schema attributet inte har angetts <ElementName> mappar det som anges i uppdateringsgrammet till en databastabell och underordnade element eller attribut mappas till kolumner i tabellen.

<after> blockera

Du kan ange en eller flera poster i blocket <after> .

Om blocket <after> inte anger något värde för en viss kolumn använder uppdateringsgrammet det standardvärde som anges i det kommenterade schemat (om ett schema har angetts). Om schemat inte anger något standardvärde för kolumnen anger uppdateringsgrammet inget explicit värde för den här kolumnen och tilldelar i stället SQL Server-standardvärdet (om det anges) till den här kolumnen. Om det inte finns något SQL Server-standardvärde och kolumnen accepterar ett NULL värde anger updategrammet kolumnvärdet till NULL. Om kolumnen inte har något standardvärde eller accepterar ett NULL värde misslyckas kommandot och uppdateringsgrammet returnerar ett fel. Det valfria updg:returnid attributet används för att returnera identitetsvärdet som genereras av systemet när en post läggs till i en tabell med kolumnen IDENTITY-type.

updg:id-attribut

Om updategrammet bara infogar poster kräver inte updategrammet attributet updg:id . Mer information om updg:idfinns i Uppdatera data med XML Updategrams (SQLXML 4.0).

updg:at-identity-attribut

När ett uppdateringsgram infogar en post i en tabell som har en IDENTITYkolumn av typen -, kan uppdateringsgrammet avbilda det systemtilldelade värdet med hjälp av det valfria attributet updg:at-identity . Uppdateringsgrammet kan sedan använda det här värdet i efterföljande åtgärder. När du kör uppdateringsgrammet kan du returnera det identitetsvärde som genereras genom att updg:returnid ange attributet.

updg:guid-attribut

Attributet updg:guid är ett valfritt attribut som genererar en globalt unik identifierare. Det här värdet finns kvar i omfånget för hela <sync> blocket där det har angetts. Du kan använda det här värdet var som helst i <sync> blocket. Attributet anropar NEWGUID() SQL Server-funktionen för att generera den unika identifieraren.

Examples

Om du vill skapa arbetsexempel med hjälp av följande exempel måste du uppfylla de krav som anges i Krav för att köra SQLXML-exempel.

Tänk på följande innan du använder updategramexemplen:

A. Infoga en post med hjälp av ett uppdateringsgram

Det här attributcentrerade uppdateringsgrammet infogar en post i HumanResources.Employee tabellen i AdventureWorks2025 databasen.

I det här exemplet anger inte uppdateringsgrammet något mappningsschema. Därför använder updategrammet standardmappning, där elementnamnet mappas till ett tabellnamn och attributen eller underordnade element mappas till kolumner i den tabellen.

Schemat AdventureWorks2025 för tabellen HumanResources.Department medför en begränsning "inte null" för alla kolumner. Därför måste uppdateringsgrammet innehålla värden som anges för alla kolumner. DepartmentID är en IDENTITYkolumn av typen -type. Därför anges inga värden för den.

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

Testa en XPath-exempelfråga mot schemat

  1. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som MyUpdategram.xml.

  2. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

I en elementcentrerad mappning ser uppdateringsgrammet ut så här:

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

I ett uppdateringsgram för blandat läge (elementcentrerade och attributcentrerade) kan ett element ha både attribut och underelement, vilket visas i det här uppdateringsgrammet:

<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. Infoga flera poster med hjälp av ett uppdateringsgram

Det här uppdateringsgrammet lägger till två nya skiftposter i HumanResources.Shift tabellen. Uppdateringsgrammet anger inte det valfria <before> blocket.

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

Testa en XPath-exempelfråga mot schemat

  1. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som Updategram-AddShifts.xml.

  2. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

En annan version av det här exemplet är ett uppdateringsgram som använder två separata <after> block i stället för ett block för att infoga de två anställda. Detta är giltigt och kan kodas på följande sätt:

<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. Arbeta med giltiga SQL Server-tecken som inte är giltiga i XML

I SQL Server kan tabellnamn innehålla ett blanksteg, till exempel tabellen Orderinformation i Northwind-databasen. Detta är dock inte giltigt i XML-tecken som är giltiga SQL Server-identifierare, men ogiltiga XML-identifierare kan kodas med kodningsvärdet _xHHHH_ , där HHHH står för den fyrsiffriga hexadecimala UCS-2-koden för tecknet i den mest betydande bit-första ordningen.

Anmärkning

I det här exemplet används Northwind-databasen. Du kan installera Northwind-databasen med hjälp av ett SQL-skript som är tillgängligt för nedladdning från den här Microsoft-webbplatsen.

Dessutom måste elementnamnet omges av hakparenteser ([ ]). Eftersom tecknen [och] inte är giltiga i XML måste du koda dem som _x005B_ respektive _x005D_. (Om du använder ett mappningsschema kan du ange elementnamn som inte innehåller tecken som inte är giltiga, till exempel blanksteg. Mappningsschemat utför den nödvändiga mappningen. Därför behöver du inte koda för dessa tecken).

Det här uppdateringsgrammet lägger till en post i tabellen Order Details i Northwind-databasen:

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

Kolumnen UnitPrice i tabellen Orderinformation är av pengatyp . Om du vill tillämpa lämplig typkonvertering (från en strängtyp till en pengatyp ) måste dollartecknet ($) läggas till som en del av värdet. Om uppdateringsgrammet inte anger något mappningsschema utvärderas det första tecknet i strängvärdet . Om det första tecknet är ett dollartecken ($) tillämpas lämplig konvertering.

Om uppdateringsgrammet anges mot ett mappningsschema där kolumnen är korrekt markerad som antingen dt:type="fixed.14.4" eller sql:datatype="money", krävs inte dollartecknet ($) och konverteringen hanteras av mappningen. Det här är det rekommenderade sättet att se till att rätt typkonvertering sker.

Testa en XPath-exempelfråga mot schemat

  1. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som UpdategramSpacesInTableName.xml.

  2. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

D. Använd at-identity-attributet för att hämta värdet som har infogats i kolumnen identitetstyp

Följande uppdateringsgram infogar två poster: en i Sales.SalesOrderHeader tabellen och en annan i Sales.SalesOrderDetail tabellen.

Först lägger updategrammet till en post i Sales.SalesOrderHeader tabellen. I den här tabellen är kolumnen SalesOrderID en IDENTITY-type-kolumn. När du lägger till den här posten i tabellen använder at-identity updategrammet därför attributet för att avbilda det tilldelade SalesOrderID-värdet som "x" (ett platshållarvärde). Updategram anger sedan den här at-identity variabeln som värdet för attributet SalesOrderID i elementet <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>

Om du vill returnera identitetsvärdet som genereras av updg:at-identity attributet kan du använda attributet updg:returnid . Följande exempel är ett reviderat uppdateringsgram som returnerar det här identitetsvärdet. (Det här uppdateringsgrammet lägger till två orderposter och två orderdetaljposter, bara för att göra exemplet lite mer komplext.)

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

När uppdateringsgrammet körs returneras resultat som liknar följande exempel, som innehåller identitetsvärdet (det genererade värdet för den ShiftID-kolumn som används för tabellidentitet) som genererades:

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

Testa en XPath-exempelfråga mot schemat

  1. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som Updategram-returnId.xml.

  2. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

E. Använd attributet updg:guid för att generera ett unikt värde

I det här exemplet infogar updategrammet en post i tabellerna Cust och CustOrder. Dessutom genererar uppdateringsgrammet ett unikt värde för attributet CustomerID med hjälp av attributet 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>

Updategrammet anger attributet returnid . Därför returneras guid som genereras:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
  </returnid>
</ROOT>

Testa uppdateringsgrammet

  1. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som Updategram-GenerateGuid.xml.

  2. Skapa följande tabeller:

    USE tempdb;
    
    CREATE TABLE Cust
    (
        CustID UNIQUEIDENTIFIER,
        LastName VARCHAR (20)
    );
    
    CREATE TABLE CustOrder
    (
        CustID UNIQUEIDENTIFIER,
        OrderID INT
    );
    
  3. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

F. Ange ett schema i ett uppdateringsgram

Updategrammet i det här exemplet infogar en post i följande tabell:

CustOrder(OrderID, EmployeeID, OrderType)

Ett XSD-schema anges i det här uppdateringsgrammet (det vill: det finns ingen standardmappning av updategram-element och attribut). Schemat tillhandahåller den nödvändiga mappningen av elementen och attributen till databastabellerna och kolumnerna.

Följande schema (CustOrderSchema.xml) beskriver ett <CustOrder> element som består av attributen OrderID och EmployeeID . För att göra schemat mer intressant tilldelas ett standardvärde till attributet EmployeeID . Ett updategram använder endast ett attributs standardvärde för infogningsåtgärder och sedan endast om updategrammet inte anger det attributet.

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

Det här uppdateringsgrammet infogar en post i tabellen CustOrder. Updategrammet anger endast attributvärdena OrderID och EmployeeID. Det anger inte attributet OrderType. Därför använder updategrammet standardvärdet för attributet EmployeeID som anges i föregående schema.

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

Fler exempel på uppdateringsgram som anger ett mappningsschema finns i Ange ett kommenterat mappningsschema i ett Updategram (SQLXML 4.0).

Testa uppdateringsgrammet

  1. Skapa den tempdb här tabellen i databasen:

    USE tempdb;
    
    CREATE TABLE CustOrder
    (
        OrderID INT,
        EmployeeID INT,
        OrderType INT
    );
    
  2. Kopiera föregående schema och klistra in det i en textfil. Spara filen som CustOrderSchema.xml.

  3. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som i samma mapp som CustOrderUpdategram.xml i föregående steg.

  4. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra uppdateringsgrammet.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Det här är motsvarande 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. Använd attributet xsi:nil för att infoga null-värden i en kolumn

Om du vill infoga ett null-värde i motsvarande kolumn i tabellen kan du ange xsi:nil attributet för ett element i ett uppdateringsgram. I motsvarande XSD-schema måste även XSD-attributet nillable anges.

Tänk till exempel på det här XSD-schemat:

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

XSD-schemat anger nillable="true" för elementet <fname> . Följande updategram använder det här schemat:

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

Uppdateringsgrammet xsi:nil anger för elementet <fname><after> i blocket. När det här uppdateringsgrammet körs infogas därför värdet NULL för för kolumnen first_name i tabellen.

Testa uppdateringsgrammet

  1. Skapa följande tabell i tempdb databasen:

    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. Kopiera föregående schema och klistra in det i en textfil. Spara filen som StudentSchema.xml.

  3. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som i samma mapp som StudentUpdategram.xml i föregående steg för att spara StudentSchema.xml.

  4. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra uppdateringsgrammet.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

H. Ange namnområden i ett uppdateringsgram

I ett updategram kan du ha element som tillhör ett namnområde som deklarerats i samma element i uppdateringsgrammet. I det här fallet måste motsvarande schema också deklarera samma namnområde och elementet måste tillhöra målnamnområdet.

I följande updategram (UpdateGram-ElementHavingNamespace.xml) tillhör elementet <Order> till exempel ett namnområde som deklarerats i elementet.

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

I det här fallet måste schemat även deklarera namnområdet enligt det här schemat:

Följande schema (XSD-ElementHavingNamespace.xml) visar hur motsvarande element och attribut måste deklareras.

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

Testa uppdateringsgrammet

  1. Kopiera föregående schema och klistra in det i en textfil. Spara filen som XSD-ElementHavingNamespace.xml.

  2. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som i samma mapp som Updategram-ElementHavingNamespace.xml användes för att spara XSD-ElementHavingnamespace.xml.

  3. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra uppdateringsgrammet.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

I. Infoga data i en XML-datatypkolumn

Du kan använda updategram för att infoga och uppdatera data som lagras i xml-datatypkolumner med följande överväganden:

  • Xml-kolumnen kan inte användas för att identifiera en befintlig rad. Därför kan den inte tas med i avsnittet i updg:before ett uppdateringsgram.

  • Namnområden som ingår i XML-fragmentet som infogas i XML-kolumnen bevaras och deras namnområdesdeklarationer läggs till i det infogade fragmentets översta element.

I följande updategram (SampleUpdateGram.xml) uppdaterar elementet <Desc> till exempel kolumnen ProductDescription i tabellen Production>productModel i exempeldatabasen AdventureWorks2025 . Resultatet av det här uppdateringsgrammet är att XML-innehållet i kolumnen ProductDescription uppdateras med XML-innehållet i elementet <Desc> .

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

Uppdateringsgrammet refererar till följande kommenterade 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>
Testa uppdateringsgrammet
  1. Kopiera föregående schema och klistra in det i en textfil. Spara filen som XSD-SampleSchema.xml.

    Anmärkning

    Eftersom updategram stöder standardmappning finns det inget sätt att identifiera början och slutet av XML-datatypen . Det innebär i praktiken att ett mappningsschema krävs vid infogning eller uppdatering av tabeller med xml-datatypskolumner. När ett schema inte anges returnerar SQLXML ett fel som anger att en av kolumnerna saknas i tabellen.

  2. Kopiera föregående uppdateringsgram och klistra in det i en textfil. Spara filen som i samma mapp som SampleUpdategram.xml användes för att spara SampleSchema.xml.

  3. Skapa och använd SQLXML 4.0-testskriptet (Sqlxml4test.vbs) för att köra uppdateringsgrammet.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.