次の方法で共有


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

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

既存のデータを更新する場合は、before> ブロックと <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> ブロック内の要素は、<更新が適用された後に before>< ブロックで指定されたレコードがどのように表示されるかを記述します。

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

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

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

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

updg:id 属性の使用

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

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

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

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

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

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

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

before> ブロックに 1 つの要素を<指定し、after> ブロックに対応する要素を <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> ブロックで指定されたすべての列値を<使用してレコードを検索します。 このアップデートグラムでは、 <before> ブロックは 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 属性によって、before> ブロックと <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: 複数 <の before> ブロックと <after> ブロックの指定

あいまいさを回避するために、ブロックの前後>><のペアを複数<使用して、例 B のアップデートグラムを記述できます。 前後>><のペアを指定することは<、混乱を最小限に抑えた複数の更新を指定する 1 つの方法です。 また、before> ブロックと <after> ブロックの<それぞれで最大 1 つの要素を指定する場合は、updg:id 属性を使用する必要はありません。

Note

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

次のアップデートグラムでは、最初 <の前><後> のペアが日シフトのシフト名を更新します。 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. 複数 <の同期> ブロックの指定

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

次のアップデートグラムでは、最初 <の同期> ブロックによって Sales.Customer テーブル内のレコードが更新されます。 簡素化するため、アップデートグラムでは ID 値 (CustomerID) と更新する値 (SalesPersonID) の 2 つの必要な値だけを指定します。

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

複数<の同期>ブロックを指定すると便利です。2 番目<の同期>ブロック (トランザクション) が Sales.SalesOrderHeader テーブルにレコードを追加できない場合でも、最初<の同期>ブロックは 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 マッピング スキーマには<、<データベース内の Sales.Customer>、<Sales.SalesOrderHeader、および Sales.SalesOrderDetail テーブルにマップされる Customer、Order>、OD> 要素があります。

<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 テーブルの特定の注文アイテムに、注文明細アイテムを追加します。 アップデートグラムには、入れ子になった要素 (Order> 要素内<に<入れ子になった OD> 要素) が含まれています。 これら 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)