次の方法で共有


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

適用対象: SQL Server Azure SQL データベース

既存のデータを更新する場合は、 <fore><after> ブロックの両方を指定する必要があります。 <before> および <after> ブロックで指定された要素は、目的の変更を記述します。 アップデートグラムは、 <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>
<after> ブロック内の要素は<fore> ブロックで指定されたレコードが更新が適用された後にどのように表示されるかを示します。

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

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

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

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

updg:id 属性の使用

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

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

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

  • アップデートグラムのキー フィールドに特定の値が 1 つ以上提供されている。

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

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

<before> および <after> ブロックで識別されるレコードは、同じ順序である必要はありません。 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:00AM から始まる勤務時間の名前を "Day" から "Early Morning" に変更する。

  • 10:00AM から始まる、"Late Morning" という名前の新しい勤務時間を挿入する。

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

<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> 要素の最初のインスタンスと、<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 属性を使用する必要はありません。

Note

ペアを形成するには、 <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 つの必要な値だけを指定します。

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)

学生 (Student) は複数の講座 (Course) に登録できるので、Course には複数の Student を含めることができます。3 番目のテーブル Enrollment は、この M:N リレーションシップを表すために必要です。

次の XSD マッピング スキーマは、 <Student><Course>、および <Enrollment> 要素を使用してテーブルの XML ビューを提供します。 マッピング スキーマの IDREFS 属性は、これらの要素間のリレーションシップを指定します。 <Course> 要素の StudentIDList 属性は、Enrollment テーブルの StudentID 列を参照する IDREFS 型属性です。 同様に、<Student> 要素の EnrolledIn 属性は、Enrollment テーブルの 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 を指定すると、アップデートグラムでは Enrollment テーブルにも新しい学生ごとのレコードが挿入され、 重複した値が追加されていないことが Enrollment テーブルで確認されます。

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

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