Uppdatering av data med XML-uppdateringsgram (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

När du uppdaterar befintlig data måste du ange både före-> och efterblocken<>.< De element som anges i före-> och efterblocken<>beskriver den önskade förändringen.< Uppdateringsgrammet använder de element som anges i <före-blocket> för att identifiera den befintliga posten/posterna i databasen. De motsvarande elementen i efter-blocket<> anger hur posterna ska se ut efter att uppdateringsoperationen har utförts. Utifrån denna information skapar updategrammet en SQL-sats som matchar efter-blocket<>. Updategrammet använder sedan denna sats för att uppdatera databasen.

Detta är updategram-formatet för en uppdateringsoperation:

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

<updg:före>
Elementen i före-blocket<> identifierar befintliga poster i databastabellerna.

<updg:efter>
Elementen i efter-blocket<> beskriver hur posterna som anges i <före-blocket> ska se ut efter att uppdateringarna har applicerats.

Mapping-schema-attributet identifierar mappningsschemat som ska användas av updategram. Om uppdateringsgrammet specificerar ett mappningsschema måste element- och attributnamnen som anges i före-> och efterblocken<>matcha namnen i schemat.< Mappningsschemat mappar dessa element- eller attributnamn till databasens tabell- och kolumnnamn.

Om ett updategram inte specificerar ett schema använder updategam standardmappning. Vid standardmappning mappas ElementName<> som anges i updategrammet till databastabellen och barnelementen eller attributen mappas till databaskolumnerna.

Ett element i före-blocket<> måste matcha endast en tabellrad i databasen. Om elementet antingen matchar flera tabellrader eller inte matchar någon tabellrad, returnerar updategrammet ett fel och avbryter hela <synkroniseringsblocket> .

Ett updategram kan innehålla flera <synkroniseringsblock> . Varje <synkroniseringsblock> behandlas som en transaktion. Varje <synkblock> kan ha flera <före-> och <efterblock> . Till exempel, om du uppdaterar två av de befintliga posterna, kan du ange två <före-> och <efterpar> , ett för varje post som uppdateras.

Använder updg:id-attributet

När flera element anges i före-> och efterblocken<>, använd updg:id-attributet för att markera rader i före- och efterblocken.<<><> Bearbetningslogiken använder denna information för att avgöra vilken post i före-blocket<> som paras med vilken post i <efter-blocket>.

Updg:id-attributet är inte nödvändigt (även om det rekommenderas) om någon av följande existerar:

  • Elementen i det specificerade mappningsschemat har attributet sql:key-fields definierat på sig.

  • Det finns ett eller flera specifika värden som anges för nyckelfältet/-fälten i uppdateringsgrammet.

Om något av detta är fallet använder updategrammet de nyckelkolumner som anges i sql:key-fields för att para ihop elementen i <före-> och <efterblocken> .

Om mappningsschemat inte identifierar nyckelkolumner (genom att använda sql:key-fields) eller om updategrammet uppdaterar ett nyckelkolumnvärde, måste du specificera updg:id.

De poster som identifieras i före-> och efterblocken<>behöver inte vara i samma ordning.< updg:id-attributet tvingar fram kopplingen mellan de element som anges i före-> och efter-blocken<>.<

Om du anger ett element i före-blocket<> och bara ett motsvarande element i <efter-blocket> är det inte nödvändigt att använda updg:id. Det rekommenderas dock att du specificerar updg:id ändå för att undvika tvetydighet.

Examples

Innan du använder exemplen med updategram, notera följande:

A. Uppdatera en post

Följande uppdateringsgram uppdaterar den anställdes efternamn till Fuller i Person.Kontakt-tabellen i AdventureWorks-databasen. Updategrammet specificerar inget mappningsschema; därför använder updategrammet standardmappning.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
   <Person.Contact ContactID="1" />  
</updg:before>  
<updg:after>  
   <Person.Contact LastName="Abel-Achong" />  
</updg:after>  
</updg:sync>  
</ROOT>  

Posten som beskrivs i före-blocket<> representerar den aktuella posten i databasen. Updategrammet använder alla kolumnvärden som anges i före-blocket<> för att söka efter posten. I detta updategram tillhandahåller före-blocket<> endast kolumnen ContactID; därför använder updategrammet endast värdet för att söka efter posten. Om du skulle lägga till Efternamn-värdet i detta block skulle uppdateringsgrammet använda både ContactID och Efternamn-värdena för att söka.

I detta uppdateringsgram anger efter-blocket<> endast kolumnvärdet Efternamn eftersom detta är det enda värdet som ändras.

För att testa updategrammet
  1. Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som UpdateLastName.xml.

  2. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

B. Uppdatera flera poster genom att använda attributet updg:id

I detta exempel utför updategrammet två uppdateringar på tabellen HumanResources.Shift i AdventureWorks-databasen:

  • Den ändrar namnet på det ursprungliga dagskiftet som börjar kl. 07:00 från "Dag" till "Tidigt morgon".

  • Den lägger in ett nytt skift som heter "Late Morning" som börjar klockan 10:00.

I updategrammet skapar attributet updg:id associationer mellan elementen i före-> och efter-blocken<>.<

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift updg:id="x" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift updg:id="y" Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
      <HumanResources.Shift updg:id="x" Name="Early Morning" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Lägg märke till hur updg:id-attributet parar ihop den första instansen av <HumanResources.Shift-elementet> i före-blocket<> med den andra instansen av <HumanResources.Shift-elementet> i <efter-blocket>.

För att testa updategrammet
  1. Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som UpdateMultipleRecords.xml.

  2. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

C. Specificering av flera <före-> och <efter-block>

För att undvika tvetydighet kan du skriva updategrammet i Exempel B genom att använda flera <före-> och <efterblockpar> . Att specificera <före-> och <efterpar> är ett sätt att specificera flera uppdateringar med minimal förvirring. Dessutom, om varje <före-> och <efter-block> specificerar högst ett element, behöver du inte använda updg:id-attributet .

Anmärkning

För att bilda ett par måste efter-taggen<> omedelbart följa sin motsvarande <före-tagg>.

I följande uppdateringsgram uppdaterar det första <före> - och <efterparet> skiftets namn för dagpasset. Det andra paret lägger in en ny skiftpost.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
       <HumanResources.Shift ShiftID="1" Name="Day" />  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Early Morning" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <HumanResources.Shift Name="Late Morning"   
                            StartTime="1900-01-01 10:00:00.000"  
                            EndTime="1900-01-01 18:00:00.000"  
                            ModifiedDate="2004-06-01 00:00:00.000"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
För att testa updategrammet
  1. Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som UpdateMultipleBeforeAfter.xml.

  2. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

D. Specificering av flera <synkblock>

Du kan ange flera <synkroniseringsblock> i ett updategram. Varje <synkblock> som anges är en oberoende transaktion.

I följande uppdateringsgram uppdaterar det första <synkblocket> en post i tabellen Sales.Customer. För enkelhetens skull specificerar updategrammet endast de nödvändiga kolumnvärdena; identitetsvärdet (CustomerID) och värdet som uppdateras (SalesPersonID).

Det andra <synkroniseringsblocket> lägger till två poster i tabellen Sales.SalesOrderHeader. För denna tabell är SalesOrderID en kolumn av typen IDENTITY. Därför specificerar inte updategrammet värdet av SalesOrderID i varje <Sales.SalesOrderHeader-element> .

Att specificera flera <synkroniseringsblock> är användbart eftersom om det andra <synkroniseringsblocket> (en transaktion) misslyckas med att lägga till poster i tabellen Sales.SalesOrderHeader, kan det första <synkroniseringsblocket> fortfarande uppdatera kundposten i tabellen Sales.Customer.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
      <Sales.Customer CustomerID="1" SalesPersonID="280" />  
    </updg:before>  
    <updg:after>  
      <Sales.Customer CustomerID="1" SalesPersonID="283" />  
    </updg:after>  
  </updg:sync>  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
   <Sales.SalesOrderHeader   
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="01010101-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-08 00:00:00.000" />  
   <Sales.SalesOrderHeader  
             CustomerID="1"  
             RevisionNumber="1"  
             OrderDate="2004-07-01 00:00:00.000"  
             DueDate="2004-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="1000.0000"  
             TaxAmt="0.0000"  
             Freight="0.0000"  
             rowguid="10101010-2222-3333-4444-556677889900"  
             ModifiedDate="2004-07-09 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
För att testa updategrammet
  1. Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som UpdateMultipleSyncs.xml.

  2. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

E. Användning av ett mappningsschema

I detta exempel specificerar updategrammet ett mappningsschema genom att använda mapping-schema-attributet . (Det finns ingen standardmappning; det vill säga, mappningsschemat tillhandahåller den nödvändiga avbildningen av element och attribut i uppdateringsgrammet till databasens tabeller och kolumner.)

De element och attribut som anges i uppdateringsgrammet avser elementen och attributen i mappningsschemat.

Följande XSD-mappningsschema har <Customer>-, <Order>- och <OD-element> som mappas till tabellerna Sales.Customer, Sales.SalesOrderHeader och Sales.SalesOrderDetail i databasen.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustomerOrder"  
          parent="Sales.Customer"  
          parent-key="CustomerID"  
          child="Sales.SalesOrderHeader"  
          child-key="CustomerID" />  
  
    <sql:relationship name="OrderOD"  
          parent="Sales.SalesOrderHeader"  
          parent-key="SalesOrderID"  
          child="Sales.SalesOrderDetail"  
          child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Order"   
                     sql:relation="Sales.SalesOrderHeader"  
                     sql:relationship="CustomerOrder" >  
           <xsd:complexType>  
              <xsd:sequence>  
                <xsd:element name="OD"   
                             sql:relation="Sales.SalesOrderDetail"  
                             sql:relationship="OrderOD" >  
                 <xsd:complexType>  
                  <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
                  <xsd:attribute name="ProductID" type="xsd:integer" />  
                  <xsd:attribute name="UnitPrice" type="xsd:decimal" />  
                  <xsd:attribute name="OrderQty" type="xsd:integer" />  
                  <xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />   
                 </xsd:complexType>  
                </xsd:element>  
              </xsd:sequence>  
              <xsd:attribute name="CustomerID" type="xsd:string" />  
              <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
              <xsd:attribute name="OrderDate" type="xsd:date" />  
           </xsd:complexType>  
        </xsd:element>  
      </xsd:sequence>  
      <xsd:attribute name="CustomerID"   type="xsd:string" />   
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

Detta mappningsschema (UpdategramMappingSchema.xml) specificeras i följande uppdateringsgram. Updategrammet lägger till en orderdetaljpost i tabellen Sales.SalesOrderDetail för en specifik order. Updategrammet inkluderar nästlade element: ett <OD-element> inbäddat i ett <Order-element> . Primärnyckel/främmande nyckel-relationen mellan dessa två element specificeras i mappningsschemat.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema="UpdategramMappingSchema.xml" >  
    <updg:before>  
       <Order SalesOrderID="43659" />  
    </updg:before>  
    <updg:after>  
      <Order SalesOrderID="43659" >  
          <OD ProductID="776" UnitPrice="2329.0000"  
              OrderQty="2" UnitPriceDiscount="0.0" />  
      </Order>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
För att testa updategrammet
  1. Kopiera mappningsschemat ovan och klistra in det i en textfil. Spara filen som UpdategramMappingSchema.xml.

  2. Kopiera updategram-mallen ovan och klistra in den i en textfil. Spara filen som UpdateWithMappingSchema.xml i samma mapp som användes för att spara mappningsschemat (UpdategramMappingSchema.xml).

  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

Fler exempel på uppdateringsgram som använder mappningsscheman finns i Ange ett kommenterat mappningsschema i ett Updategram (SQLXML 4.0).

F. Att använda ett mappningsschema med IDREFS-attribut

Detta exempel illustrerar hur updategrams använder IDREFS-attributen i mappningsschemat för att uppdatera poster i flera tabeller. För detta exempel, anta att databasen består av följande tabeller:

  • Student (StudentID, Efternamn)

  • Kurs(KursID, Kursnamn)

  • Inskrivning (StudentID, KursID)

Eftersom en student kan anmäla sig till många kurser och en kurs kan ha många studenter, krävs den tredje tabellen, Enrollment table, för att representera denna M:N-relation.

Följande XSD-mappningsschema ger en XML-vy av tabellerna genom att använda <elementen Student>, <Kurs> och <Inskrivning> . IDREFS-attributen i mappningsschemat specificerar relationen mellan dessa element. Attributet StudentIDListkurselementet<> är ett IDREFS-typattribut som hänvisar till kolumnen StudentID i Enrollment-tabellen. På samma sätt är attributet EnrolledIn på Student-elementet <> ett IDREFS-typattribut som refererar till kolumnen CourseID i Enrollment-tabellen.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="StudentEnrollment"  
          parent="Student"  
          parent-key="StudentID"  
          child="Enrollment"  
          child-key="StudentID" />  
  
    <sql:relationship name="CourseEnrollment"  
          parent="Course"  
          parent-key="CourseID"  
          child="Enrollment"  
          child-key="CourseID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  
  <xsd:element name="Course" sql:relation="Course"   
                             sql:key-fields="CourseID" >  
    <xsd:complexType>  
    <xsd:attribute name="CourseID"  type="xsd:string" />   
    <xsd:attribute name="CourseName"   type="xsd:string" />   
    <xsd:attribute name="StudentIDList" sql:relation="Enrollment"  
                 sql:field="StudentID"  
                 sql:relationship="CourseEnrollment"   
                                     type="xsd:IDREFS" />  
  
    </xsd:complexType>  
  </xsd:element>  
  <xsd:element name="Student" sql:relation="Student" >  
    <xsd:complexType>  
    <xsd:attribute name="StudentID"  type="xsd:string" />   
    <xsd:attribute name="LastName"   type="xsd:string" />   
    <xsd:attribute name="EnrolledIn" sql:relation="Enrollment"  
                 sql:field="CourseID"  
                 sql:relationship="StudentEnrollment"   
                                     type="xsd:IDREFS" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

När du anger detta schema i ett updategram och infogar en post i kurstabellen, infogar updategrammet en ny kurspost i kurstabellen. Om du anger ett eller flera nya student-ID för attributet StudentIDList, infogar updategrammet också en post i Enrollment-tabellen för varje ny student. Uppdateringsgrammet säkerställer att inga dubbletter läggs till i registreringstabellen.

För att testa updategrammet
  1. Skapa dessa tabeller i databasen som anges i den virtuella roten:

    CREATE TABLE Student(StudentID varchar(10) primary key,   
                         LastName varchar(25))  
    CREATE TABLE Course(CourseID varchar(10) primary key,   
                        CourseName varchar(25))  
    CREATE TABLE Enrollment(StudentID varchar(10)   
                                      references Student(StudentID),  
                           CourseID varchar(10)   
                                      references Course(CourseID))  
    
  2. Lägg till denna exempeldata:

    INSERT INTO Student VALUES ('S1','Davoli')  
    INSERT INTO Student VALUES ('S2','Fuller')  
    
    INSERT INTO Course VALUES  ('CS101', 'C Programming')  
    INSERT INTO Course VALUES  ('CS102', 'Understanding XML')  
    
    INSERT INTO Enrollment VALUES ('S1', 'CS101')  
    INSERT INTO Enrollment VALUES ('S1', 'CS102')  
    
  3. Kopiera mappningsschemat ovan och klistra in det i en textfil. Spara filen som SampleSchema.xml.

  4. Spara updategrammet (SampleUpdategram) i samma mapp som användes för att spara mappningsschemat i föregående steg. (Detta uppdateringsgram tar bort en student med StudentID="1" från CS102-kursen.)

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  5. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra updategrammet.

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

  6. Spara och kör följande updategram som beskrivits i föregående steg. Updategrammet lägger till studenten med StudentID="1" tillbaka i CS102-kursen genom att lägga till en post i registreringstabellen.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  7. Spara och köra detta nästa uppdateringsgram som beskrivits i föregående steg. Detta uppdateringsgram infogar tre nya studenter och anmäler dem till CS101-kursen. Återigen infogar IDREFS-relationen poster i registreringstabellen.

    <ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
      <updg:sync mapping-schema="SampleSchema.xml" >  
        <updg:before>  
           <Course updg:id="y" CourseID="CS101"   
                               CourseName="C Programming" />  
        </updg:before>  
        <updg:after >  
           <Student updg:id="x1" StudentID="S3" LastName="Leverling" />  
           <Student updg:id="x2" StudentID="S4" LastName="Pecock" />  
           <Student updg:id="x3" StudentID="S5" LastName="Buchanan" />  
           <Course updg:id="y" CourseID="CS101"  
                               CourseName="C Programming"  
                               StudentIDList="S3 S4 S5" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    

Det här är motsvarande XDR-schema:

<?xml version="1.0" ?>  
<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
        xmlns:dt="urn:schemas-microsoft-com:datatypes"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <ElementType name="Enrollment" sql:relation="Enrollment" sql:key-fields="StudentID CourseID">  
    <AttributeType name="StudentID" dt:type="id" />  
    <AttributeType name="CourseID" dt:type="id" />  
  
    <attribute type="StudentID" />  
    <attribute type="CourseID" />  
  </ElementType>  
  <ElementType name="Course" sql:relation="Course" sql:key-fields="CourseID">  
    <AttributeType name="CourseID" dt:type="id" />  
    <AttributeType name="CourseName" />  
  
    <attribute type="CourseID" />  
    <attribute type="CourseName" />  
  
    <AttributeType name="StudentIDList" dt:type="idrefs" />  
    <attribute type="StudentIDList" sql:relation="Enrollment" sql:field="StudentID" >  
        <sql:relationship  
                key-relation="Course"  
                key="CourseID"  
                foreign-relation="Enrollment"  
                foreign-key="CourseID" />  
    </attribute>  
  
  </ElementType>  
  <ElementType name="Student" sql:relation="Student">  
    <AttributeType name="StudentID" dt:type="id" />  
     <AttributeType name="LastName" />  
  
    <attribute type="StudentID" />  
    <attribute type="LastName" />  
  
    <AttributeType name="EnrolledIn" dt:type="idrefs" />  
    <attribute type="EnrolledIn" sql:relation="Enrollment" sql:field="CourseID" >  
        <sql:relationship  
                key-relation="Student"  
                key="StudentID"  
                foreign-relation="Enrollment"  
                foreign-key="StudentID" />  
    </attribute>  
  
    <element type="Enrollment" sql:relation="Enrollment" >  
        <sql:relationship key-relation="Student"  
                          key="StudentID"  
                          foreign-relation="Enrollment"  
                          foreign-key="StudentID" />  
    </element>  
  </ElementType>  
  
</Schema>  

Fler exempel på uppdateringsgram som använder mappningsscheman finns i Ange ett kommenterat mappningsschema i ett Updategram (SQLXML 4.0).

Se även

Säkerhetsöverväganden för Updategram (SQLXML 4.0)