次の方法で共有


XML アップデートグラムを使用したデータの更新 (SQLXML 4.0)

既存のデータを更新する場合は、 <fore><after> ブロックの両方を指定する必要があります。 <before>および<以降>ブロックで指定された要素は、目的の変更を記述します。 アップデートグラムは、 <before> ブロックで指定された要素を使用して、データベース内の既存のレコードを識別します。 <after> ブロック内の対応する要素は、更新操作の実行後にレコードがどのように表示されるかを示します。 この情報から、アップデートグラムは、<after> ブロックに一致する SQL ステートメントを作成します。 その後、アップデートグラムはこのステートメントを使用してデータベースを更新します。

これは、更新操作のアップデートグラム形式です。

<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>
<before> ブロック内の要素は、データベース テーブル内の既存のレコードを識別します。

<updg:after>
<以降>ブロック内の要素は、<fore> ブロックで指定されたレコードが更新プログラムの適用後にどのように表示されるかを示します。

mapping-schema属性は、アップデートグラムで使用されるマッピング スキーマを識別します。 アップデートグラムでマッピング スキーマが指定されている場合、<fore> 以降で指定された要素と属性の名前<>ブロックはスキーマ内の名前と一致する必要があります。 マッピング スキーマは、これらの要素名または属性名をデータベース テーブルと列名にマップします。

アップデートグラムでスキーマが指定されていない場合、updategam は既定のマッピングを使用します。 既定のマッピングでは、アップデートグラムで指定された <ElementName> はデータベース テーブルにマップされ、子要素または属性はデータベース列にマップされます。

<before> ブロック内の要素は、データベース内の 1 つのテーブル行にのみ一致する必要があります。 要素が複数のテーブル行と一致するか、テーブル行と一致しない場合、アップデートグラムはエラーを返し、<sync> ブロック全体を取り消します。

アップデートグラムには、複数の<sync>ブロックを含めることができます。 各 <sync> ブロックはトランザクションとして扱われます。 各<sync> ブロックには、複数の<fore><以降>ブロック含めることができます。 たとえば、既存のレコードのうち 2 つを更新する場合は、更新するレコードごとに 1 つずつ、2 つの<>以降<>ペアを指定できます。

updg:id 属性の使用

<before> および <after> ブロックで複数の要素が指定されている場合は、updg:id 属性を使用して、<before> および <after> ブロック内の行をマークします。 処理ロジックでは、この情報を使用して、<before> ブロック内のレコードと<後>ブロック内のレコードのペアを決定します。

次のいずれかが存在する場合、 updg:id 属性は必要ありません (ただし、推奨)。

  • 指定したマッピング スキーマ内の要素には、 sql:key-fields 属性が定義されています。

  • アップデートグラムのキー フィールドには、1 つ以上の特定の値が指定されています。

いずれの場合も、アップデートグラムはsql:key-fieldsで指定されたキー列を使用して、<fore>ブロックと<>ブロック内要素をペアにします。

マッピング スキーマが ( sql:key-fields を使用して) キー列を識別しない場合、またはアップデートグラムがキー列の値を更新している場合は、 updg:idを指定する必要があります。

<before>および<以降>ブロックで識別されるレコードは、同じ順序である必要はありません。 updg:id属性は、<before> および <after> ブロックで指定された要素間の関連付けを強制します。

<before> ブロック内に 1 つの要素を指定し、<以降>ブロックに対応する要素を 1 つだけ指定する場合、updg:idの使用は必要ありません。 ただし、あいまいさを避けるために、 updg:id を指定することをお勧めします。

例示

アップデートグラムの例を使用する前に、次の点に注意してください。

  • ほとんどの例では、既定のマッピングを使用します (つまり、アップデートグラムではマッピング スキーマが指定されません)。 マッピング スキーマを使用するアップデートグラムのその他の例については、「 アップデートグラムでの注釈付きマッピング スキーマの指定 (SQLXML 4.0)」を参照してください。

  • ほとんどの例では、AdventureWorks サンプル データベースを使用しています。 すべての更新は、このデータベースのテーブルに適用されます。 AdventureWorks データベースを復元できます。

A。 レコードの更新

次のアップデートグラムは、AdventureWorks データベースの Person.Contact テーブルの従業員の姓を Fuller に更新します。 アップデートグラムはマッピングスキーマを指定しません。そのため、アップデートグラムでは既定のマッピングが使用されます。

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

<before> ブロックで説明されているレコードは、データベース内の現在のレコードを表します。 アップデートグラムは、 <before> ブロックで指定されたすべての列値を使用してレコードを検索します。 このアップデートグラムでは、 <fore> ブロックは ContactID 列のみを提供するため、アップデートグラムは値のみを使用してレコードを検索します。 このブロックに LastName 値を追加した場合、アップデートグラムは ContactID と LastName の両方の値を使用して検索します。

このアップデートグラムでは、変更される唯一の値であるため、<after> ブロックは LastName 列の値のみを提供します。

アップデートグラムをテストするには
  1. 上記のアップデートグラム テンプレートをコピーし、テキスト ファイルに貼り付けます。 ファイルを UpdateLastName.xmlとして保存します。

  2. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

B. updg:id 属性を使用して複数のレコードを更新する

この例では、アップデートグラムは AdventureWorks データベースの HumanResources.Shift テーブルに対して次の 2 つの更新を実行します。

  • 午前 7 時から始まる元の日のシフトの名前を "Day" から "Early Morning" に変更します。

  • 午前 10 時から始まる "Late Morning" という名前の新しいシフトが挿入されます。

アップデートグラムでは、updg:id属性によって、<fore> および <after> ブロック内の要素間の関連付けが作成されます。

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

updg:id属性が、<before> ブロック内の <HumanResources.Shift> 要素の最初のインスタンスと、<after> ブロック内の <HumanResources.Shift> 要素の 2 番目のインスタンスとどのようにペアにしているかに注目してください。

アップデートグラムをテストするには
  1. 上記のアップデートグラム テンプレートをコピーし、テキスト ファイルに貼り付けます。 ファイルを UpdateMultipleRecords.xmlとして保存します。

  2. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

C. 複数の <fore> および <after> ブロックの指定

あいまいさを回避するために、複数の<fore>および<以降のブロック ペアを使用して、例 B のアップデートグラム>書き込むことができます。 前<><以降>ペアを指定することは、混乱を最小限に抑えた複数の更新を指定する 1 つの方法です。 また、各<fore>および<以降>ブロックで最大 1 つの要素を指定する場合は、updg:id属性を使用する必要はありません。

ペアを形成するには、 <after> タグが対応する <fore> タグの直後に続く必要があります。

次のアップデートグラムでは、最初の <前><以降> ペアは日シフトのシフト名を更新します。 2 番目のペアは、新しいシフト レコードを挿入します。

<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>  
アップデートグラムをテストするには
  1. 上記のアップデートグラム テンプレートをコピーし、テキスト ファイルに貼り付けます。 ファイルを UpdateMultipleBeforeAfter.xmlとして保存します。

  2. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

D. 複数の <sync> ブロックを指定する

アップデートグラムには複数の<sync>ブロックを指定できます。 指定された各 <sync> ブロックは独立したトランザクションです。

次のアップデートグラムでは、最初の <sync> ブロックによって Sales.Customer テーブル内のレコードが更新されます。 わかりやすくするために、アップデートグラムは必要な列値のみを指定します。ID 値 (CustomerID) と更新される値 (SalesPersonID)。

2 番目の <sync> ブロックは、Sales.SalesOrderHeader テーブルに 2 つのレコードを追加します。 このテーブルでは、SalesOrderID は IDENTITY 型の列です。 したがって、アップデートグラムでは、各 <Sales.SalesOrderHeader> 要素の SalesOrderID の値は指定されません。

複数の <sync> ブロックを指定すると便利です。2 番目の <sync> ブロック (トランザクション) が Sales.SalesOrderHeader テーブルにレコードを追加できない場合、最初の <sync> ブロックは 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>  
アップデートグラムをテストするには
  1. 上記のアップデートグラム テンプレートをコピーし、テキスト ファイルに貼り付けます。 ファイルを UpdateMultipleSyncs.xmlとして保存します。

  2. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

E. マッピング スキーマの使用

この例では、アップデートグラムは mapping-schema 属性を使用してマッピング スキーマを指定します。 (既定のマッピングはありません。つまり、マッピング スキーマは、アップデートグラム内の要素と属性のデータベース テーブルと列への必要なマッピングを提供します)。

アップデートグラムで指定された要素と属性は、マッピング スキーマの要素と属性を参照します。

次の XSD マッピング スキーマには <Customer><Order>、および <OD> データベース内の Sales.Customer、Sales.SalesOrderHeader、および Sales.SalesOrderDetail テーブルにマップされる要素があります。

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

このマッピング スキーマ (UpdategramMappingSchema.xml) は、次のアップデートグラムで指定します。 アップデートグラムは、特定の注文の Sales.SalesOrderDetail テーブルに注文詳細項目を追加します。 アップデートグラムには、入れ子になった要素が含まれています。<OD>要素は、<Order> 要素内に入れ子になっています。 これら 2 つの要素間の主キーと外部キーのリレーションシップは、マッピング スキーマで指定されます。

<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>  
アップデートグラムをテストするには
  1. 上記のマッピング スキーマをコピーし、テキスト ファイルに貼り付けます。 ファイルを UpdategramMappingSchema.xmlとして保存します。

  2. 上記のアップデートグラム テンプレートをコピーし、テキスト ファイルに貼り付けます。 マッピング スキーマ (UpdategramMappingSchema.xml) の保存に使用したのと同じフォルダーに UpdateWithMappingSchema.xml としてファイルを保存します。

  3. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

マッピング スキーマを使用するアップデートグラムのその他の例については、「 アップデートグラムでの注釈付きマッピング スキーマの指定 (SQLXML 4.0)」を参照してください。

F. IDREFS 属性でのマッピング スキーマの使用

この例では、アップデートグラムでマッピング スキーマの IDREFS 属性を使用して、複数のテーブルのレコードを更新する方法を示します。 この例では、データベースが次のテーブルで構成されているとします。

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

学生は多くのコースに登録でき、コースには多くの学生を含めることができるため、この M:N リレーションシップを表すには、3 番目のテーブルである Enrollment テーブルが必要です。

次の XSD マッピング スキーマは、<Student>、<Course>、および <Enrollment> 要素を使用してテーブルの XML ビューを提供します。 マッピング スキーマの IDREFS 属性は、これらの要素間のリレーションシップを指定します。 <Course> 要素の StudentIDList 属性は、Enrollment テーブルの StudentID 列を参照する IDREFS 型属性です。 同様に、<Student> 要素の EnrolledIn 属性は、登録テーブルの CourseID 列を参照する IDREFS 型属性です。

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

アップデートグラムでこのスキーマを指定し、Course テーブルにレコードを挿入するたびに、アップデートグラムは Course テーブルに新しいコースレコードを挿入します。 StudentIDList 属性に 1 つ以上の新しい学生 ID を指定した場合、アップデートグラムは新しい学生ごとに登録テーブルにレコードを挿入します。 アップデートグラムにより、登録テーブルに重複が追加されなくなります。

アップデートグラムをテストするには
  1. 仮想ルートで指定されているデータベースに次のテーブルを作成します。

    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. 次のサンプル データを追加します。

    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. 上記のマッピング スキーマをコピーし、テキスト ファイルに貼り付けます。 ファイルを SampleSchema.xmlとして保存します。

  4. 前の手順でマッピング スキーマを保存するために使用したのと同じフォルダーにアップデートグラム (SampleUpdategram) を保存します。 (このアップデートグラムは、CS102 コースから StudentID="1" の学生を削除します。

    <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. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成して使用して、アップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

  6. 前の手順で説明したように、次のアップデートグラムを保存して実行します。 アップデートグラムは、StudentID="1" を持つ学生を登録テーブルにレコードを追加して、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" />  
        </updg:before>  
        <updg:after >  
            <Student updg:id="x" StudentID="S1" LastName="Davolio"  
                                 EnrolledIn="CS101 CS102" />  
        </updg:after>  
      </updg:sync>  
    </ROOT>  
    
  7. 前の手順で説明したように、この次のアップデートグラムを保存して実行します。 このアップデートグラムは、3人の新しい学生を挿入し、CS101コースに登録します。 ここでも、IDREFS リレーションシップは登録テーブルにレコードを挿入します。

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

これは同等の 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>  

マッピング スキーマを使用するアップデートグラムのその他の例については、「 アップデートグラムでの注釈付きマッピング スキーマの指定 (SQLXML 4.0)」を参照してください。

こちらもご覧ください

アップデートグラムのセキュリティに関する考慮事項 (SQLXML 4.0)