Udostępnij przez


Aktualizowanie danych za pomocą Updategrams XML (SQLXML 4.0)

Aktualizuj istniejące dane, należy określić obie <before> i <after> bloki. Elementy określone <before> i <after> Bloki opisują żądane zmiany. The updategram używa elementów, które są określone w <before> Blok do identyfikowania istniejących rekordów w bazie danych. Odpowiednich elementów w <after> Blok wskazują, jak powinna wyglądać rekordy po wykonaniu operacji aktualizacji. Z tej informacji updategram tworzy instrukcję SQL, który odpowiada <after> blok. The updategram aktualizacji bazy danych używa tej instrukcja.

Jest to format updategram operacji aktualizacji:

<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:before>
    Elementy znajdujące się w <before> Blok zidentyfikować istniejące rekordy w tabelach bazy danych.

  • <updg:after>
    Elementy znajdujące się w <after> Blok opisują, w jaki sposób rekordy określone w <before> Blok powinna wyglądać po zastosowaniu aktualizacji.

The mapping-schema atrybut identifies the mapping schema to be used by the updategram. Jeśli updategram określono mapowania schematu, nazwy elementów i atrybut określonych w <before> i <after> Bloki muszą odpowiadać nazwom w schemacie. Mapowanie schematu mapuje te elementu lub nazwy atrybut do tabela bazy danych i nazwy kolumn.

Jeśli updategram nie określono schematu, the updategam używa domyślnego odwzorowania.W domyślnej mapowania, <ElementName> określone w mapach updategram do tabela bazy danych i podrzędność elementów lub atrybutów mapy do kolumn bazy danych.

Element <before> blok musi być zgodna z wierszem tylko jedną tabela w bazie danych. Jeśli element pasuje do wielu wierszy tabela lub nie pasuje do dowolnego wiersza tabela, the updategram zwraca błąd i anuluje cały <sync> blok.

An updategram może zawierać wiele <sync> bloki. Każdy <sync> blok jest traktowany jako transakcja. Każdy <sync> Blok może zawierać wiele <before> i <after> bloki. Na przykład jeśli aktualizowane są dwa z istniejących rekordów, można określić dwa <before> i <after> pary, jeden dla każdego rekordu, są aktualizowane.

Za pomocą updg:id atrybut

Określono wiele elementów w <before> i <after> bloki, za pomocą updg:id atrybut do oznaczenia wierszy w <before> i <after> bloki. Przetwarzanie logiki używa tych informacji do ustalenia, co jest rejestrowane w <before> blokowanie pary z co rejestrować w <after> blok.

The updg:id atrybut is not necessary (although recommended) if either of the following exists:

  • Są elementami w schemacie określonego mapowania sql:key-fields atrybut zdefiniowane na nich.

  • Istnieje jeden lub więcej określonych podano wartość dla pole klucz w updategram.

Jeśli jest albo przypadek updategram korzysta z kolumny klucz, które zostały określone w sql:key-fields do elementów w parą <before> i <after> bloki.

Jeśli mapowanie schematu nie wskazuje kolumna klucz (przy użyciu sql:key-fields) lub jeśli updategram aktualizuje wartość kolumna klucz, należy określić updg:id.

Rekordy, które są identyfikowane w <before> i <after> Bloki nie muszą być w tej samej kolejności. The updg:id atrybut forces the association between the elements that are specified in the <before> and <after> blocks.

Jeśli określisz jeden element w <before> Blok i tylko jeden element odpowiednich <after> blokowanie, przy użyciu updg:id nie jest konieczne. Jednak zaleca się, że określona updg:id Mimo to w celu uniknięcia niejednoznaczności.

Przykłady

Przed użyciem przykłady updategram należy pamiętać o następujących kwestiach:

  • Większość przykładów za pomocą domyślnego mapowania (czyli nie mapowania schematu jest określona w updategram).Aby uzyskać więcej przykładów updategrams korzystające z mapowania schematów zobacz Określanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).

  • Większość przykładów korzysta z przykładowej bazy danych AdventureWorks.Wszystkie aktualizacje mają zastosowanie do tabel w bazie danych.Można przywrócić bazy danych AdventureWorks.Aby uzyskać informacje dotyczące przywracania bazy danych AdventureWorks zobacz AdventureWorks przykładowe bazy danych.

A.Aktualizowanie rekordu

Następujące updategram aktualizuje nazwisko pracownika Fuller Person.Contact tabela bazy danych AdventureWorks.The updategram nie określono żadnych mapowanie schematu, dlatego updategram używa domyślnego odwzorowania.

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

Rekord opisanych w <before> Blok reprezentuje bieżący rekord w bazie danych. The updategram wykorzystuje wszystkie wartości kolumna określonej w <before> blok, aby wyszukać rekord. W tym updategram <before> Blok zapewnia tylko kolumna ContactID; dlatego updategram używa tylko wartości do wyszukania rekordu. Gdyby dodać do tego blok wartość nazwisko, the updategram będzie używane do wyszukiwania wartości ContactID i nazwisko.

W tym updategram <after> Blok zawiera wartość kolumna Nazwisko, ponieważ jest to jedyna wartość, który został zmieniony.

Aby przetestować updategram

  1. Powyżej szablonu updategram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako UpdateLastName.xml.

  2. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

B.Aktualizowanie wielu rekordów przy użyciu atrybut updg:id

W tym przykładzie updategram wykonuje dwie aktualizacje dla tabela HumanResources.Shift bazy danych AdventureWorks:

  • Zmienia nazwę oryginalnego shift dzień rozpoczynający godzinie 7: 00 z "" dzień"do"Wczesnego rano".

  • Wstawia nowe przesunięcie o nazwie „ późnym rano", rozpoczyna się od 10: 00 AM.

W updategram updg:id atrybut tworzy skojarzenia między elementami w <before> i <after> bloki.

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

Ogłoszenie w jaki sposób updg:id pierwsze wystąpienie par atrybut <HumanResources.Shift> element <before> blok z drugiego wystąpienia <HumanResources.Shift> element <after> blok.

Aby przetestować updategram

  1. Powyżej szablonu updategram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako UpdateMultipleRecords.xml.

  2. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

C.Określanie wielu <przed> i <Po> bloki

Aby uniknąć niejednoznaczności, można napisać updategram przykład b, za pomocą wielu <before> i <after> pary blok. Określanie <before> i <after> pary jest jednym ze sposobów określania wielu aktualizacji przy minimalnej pomyłek. Ponadto jeśli każda z <before> i <after> Bloki określić co najwyżej jeden element, nie trzeba używać updg:id atrybut.

Uwaga

Do utworzenia parze <after> Tag musi bezpośrednio po jej odpowiadające <before> tag.

W następujących updategram pierwszy <before> i <after> para aktualizuje nazwę shift shift dnia. Druga para Wstawia nowy rekord przesunięcia.

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

Aby przetestować updategram

  1. Powyżej szablonu updategram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako UpdateMultipleBeforeAfter.xml.

  2. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

D.Określanie wielu <Synchronizacja> bloki

Można określić wiele <sync> bloki w updategram. Każdy <sync> określony blok jest transakcją niezależnych.

W następujących updategram pierwszy <sync> Blok aktualizacje rekordu w tabela Sales.Customer. Do celów uproszczenia updategram określa tylko wartości wymaganej kolumna; wartość tożsamość (identyfikator klienta) i wartości są aktualizowane (SalesPersonID).

Drugi <sync> Blok dodaje dwa rekordy do tabela Sales.SalesOrderHeader. W tej tabela SalesOrderID jest to kolumna typ IDENTITY.Dlatego updategram nie określa wartość SalesOrderID w każdym z <Sales.SalesOrderHeader> elementy.

Określanie wielu <sync> Bloki jest przydatne, ponieważ jeśli drugi <sync> blok (transakcję) kończy się niepowodzeniem do dodania rekordów do tabela Sales.SalesOrderHeader pierwszy <sync> Blok można nadal aktualizować rekord klienta w tabela 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>

Aby przetestować updategram

  1. Powyżej szablonu updategram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako UpdateMultipleSyncs.xml.

  2. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

E.Za pomocą schematu mapowania

W tym przykładzie updategram określono mapowania schematu przy użyciu mapping-schema atrybut. (Brak domyślnego mapowania; oznacza to, mapowanie schematu zawiera niezbędne mapowanie elementów i atrybutów w updategram do tabel bazy danych i kolumny).

Elementy i atrybuty określonych w updategram odnoszą się do elementy i atrybuty w schemacie mapowania.

Ma następujące schematu XSD mapowania <Customer>, <Order>, a <OD> elementy, które są mapowane na Sales.Customer Sales.SalesOrderHeader i Sales.SalesOrderDetail tabel w bazie danych.

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

To mapowanie schematu (UpdategramMappingSchema.xml) jest określona w następujących updategram.The updategram dodaje element szczegółów zamówienia w tabela Sales.SalesOrderDetail dla określonego zamówienia.The updategram zawiera zagnieżdżone elementy: an <OD> zagnieżdżone w elemencie <Order> element. Między tymi dwoma elementami podstawowego relacja klucz obcy/klucz jest określona w schemacie mapowania.

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

Aby przetestować updategram

  1. Skopiuj powyżej schematu mapowania i wkleić go do pliku tekstowego.Zapisz plik jako UpdategramMappingSchema.xml.

  2. Powyżej szablonu updategram skopiować i wkleić go do pliku tekstowego.Zapisz plik jako UpdateWithMappingSchema.xml w tym samym folderze, którego użyto do zapisania mapowanie schematu (UpdategramMappingSchema.xml).

  3. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

Aby uzyskać więcej przykładów updategrams korzystające z mapowania schematów zobacz Określanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).

F.Za pomocą schematu mapowania atrybutów IDREFS

Ten przykład ilustruje, jak updategrams użyć IDREFS atrybuty w schemacie mapowania do aktualizować rekordy w wielu tabelach.W tym przykładzie założono, że baza danych składa się z następujących tabel:

  • Uczeń (StudentID, nazwisko)

  • Kurs (CourseID, CourseName)

  • Funkcja rejestrowania (StudentID, CourseID)

Ponieważ student może rejestrować w wielu kursów i kursie może mieć wiele studentów, trzecią tabela, w tabela rejestracji, jest zobowiązana do reprezentowania tej relacji M:N.

Następujące schematu XSD mapowania zapewnia utworzony widok XML z tabel za pomocą <Dla studentów>, <Kurs>, a <Funkcja rejestrowania> elementy. The IDREFS attributes in the mapping schema specify the relationship between these elements.The StudentIDList atrybut on the <Course> element is an IDREFS type atrybut that refers to the StudentID kolumna in the Enrollment tabela.Podobnie EnrolledIn atrybut <Dla studentów> element jest IDREFS typ atrybutu, który odwołuje się do kolumna CourseID w tabela rejestracji.

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

Za każdym razem, gdy określenie tego schematu w updategram i wstawić rekord w tabela Kurs, the updategram Wstawia nowy rekord kursu w tabela Kurs.Jeśli określisz jednego lub kilku nowych student identyfikatorów dla atrybut StudentIDList the updategram również wstawia rekordu w tabela rejestracji dla każdego nowego uczniów.The updategram daje pewność, że nie duplikaty zostaną dodane do tabela rejestrowania.

Aby przetestować updategram

  1. Tworzenie tych tabel w bazie danych, która jest określona w wirtualnym katalogu głównym:

    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. Dodaj dane przykładowe to:

    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. Skopiuj powyżej schematu mapowania i wkleić go do pliku tekstowego.Zapisz plik jako SampleSchema.xml.

  4. Zapisz updategram (SampleUpdategram) w tym samym folderze, w którym można zapisać schemat mapowanie w poprzednim kroku.(Ta updategram spadnie studentów z StudentID = "1" z kursu CS102.)

    <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. Tworzenie i wykonać updategram za pomocą skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.

  6. Zapisz i wykonać następującą updategram opisane w poprzednich krokach.The updategram dodaje studentów z StudentID = "1" do kursu CS102 przez dodanie rekordu w tabela rejestracji.

    <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. Zapisz i wykonaj to updategram następnego, jak to opisano w poprzednich krokach.To updategram wstawia trzy nowe studentów i rejestruje je w ramach CS101.Ponownie relacji IDREFS wstawia rekordy w tabela rejestracji.

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

Jest to równoważne schematu XDR:

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

Aby uzyskać więcej przykładów updategrams korzystające z mapowania schematów zobacz Określanie adnotacjami mapowanie schematu w Updategram (SQLXML 4.0).