다음을 통해 공유


XML Updategrams를 사용하여 데이터 업데이트(SQLXML 4.0)

적용 대상: SQL ServerAzure SQL Database

기존 데이터를 업데이트할 때는 블록 앞><뒤>를 <모두 지정해야 합니다. 블록 전후<>><지정된 요소는 원하는 변경 사항을 설명합니다. updategram은 이전> 블록에 <지정된 요소를 사용하여 데이터베이스의 기존 레코드를 식별합니다. 후> 블록의 <해당 요소는 업데이트 작업을 실행한 후 레코드가 어떻게 표시되어야 하는지를 나타냅니다. 이 정보에서 updategram은 후>방 블록과 일치하는 <SQL 문을 만듭니다. 그런 다음 updategram은 이 문을 사용하여 데이터베이스를 업데이트합니다.

업데이트 작업의 updategram 형식은 다음과 같습니다.

<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>
이전> 블록의 <요소는 데이터베이스 테이블의 기존 레코드를 식별합니다.

<updg:after>
After> 블록의< 요소는 이전> 블록에 지정된 레코드가 <업데이트를 적용한 후 어떻게 확인해야 하는지 설명합니다.

매핑 스키마 특성은 updategram에서 사용할 매핑 스키마를 식별합니다. updategram이 매핑 스키마를 지정하는 경우 이전 및 이후 블록에> <지정된 요소 및 <특성 이름이 스키마의 이름과 일치해야 합니다.> 매핑 스키마는 이러한 요소 또는 특성 이름을 데이터베이스 테이블 및 열 이름에 매핑합니다.

updategram에서 스키마를 지정하지 않으면 updategam은 기본 매핑을 사용합니다. 기본 매핑 <에서 updategram에 지정된 ElementName> 은 데이터베이스 테이블에 매핑되고 자식 요소 또는 특성은 데이터베이스 열에 매핑됩니다.

이전> 블록의 요소는 데이터베이스에서 <하나의 테이블 행과만 일치해야 합니다. 요소가 여러 테이블 행과 일치하거나 테이블 행과 일치하지 않는 경우 updategram은 오류를 반환하고 전체 <동기화> 블록을 취소합니다.

updategram에는 여러 <동기화> 블록이 포함될 수 있습니다. 각 <동기화> 블록은 트랜잭션으로 처리됩니다. 각 <동기화> 블록은 블록 전후>><에 여러 <개 있을 수 있습니다. 예를 들어 두 개의 기존 레코드를 업데이트하는 경우 업데이트되는 각 레코드에 대해 하나씩 두 개의 쌍 전후 >>< 를 지정할 수 있습니다.<

updg:id 특성 사용

앞><뒤> 블록에서< 여러 요소를 지정하는 경우 updg:id 특성을 사용하여 >과 <뒤> 블록의 행을 <표시합니다. 처리 논리는 이 정보를 사용하여 이전> 블록의 레코드와<> 블록의 레코드 쌍을 <결정합니다.

다음 중 하나가 있는 경우 updg:id 특성은 필요하지 않습니다(권장하지만).

  • 지정된 매핑 스키마의 요소에는 sql:key-fields 특성이 정의되어 있습니다.

  • Updategram의 키 필드에 대해 하나 이상의 특정 값이 제공된 경우

이 경우 updategram은 sql:key-fields에 지정된 키 열을 사용하여 블록 앞>과<>의 요소를< 페어링합니다.

매핑 스키마가 키 열을 식별하지 않거나(sql:key-fields 사용) updategram이 키 열 값을 업데이트하는 경우 updg:id를 지정해야 합니다.

이전 및< 이후> 블록에서 <>식별되는 레코드는 동일한 순서로 되어 있지 않아도 됩니다. updg:id 특성은 앞>과<> 블록에< 지정된 요소 간의 연결을 강제합니다.

이전> 블록에서< 하나의 요소를 지정하고 after> 블록에 <해당하는 요소 하나만 지정하는 경우 updg:id를 사용할 필요가 없습니다. 그러나 모호성을 방지하려면 updg:id를 지정하는 것이 좋습니다.

예제

updategram 예제를 사용하기 전에 다음 사항에 유의하세요.

A. 레코드 업데이트

다음 Updategram은 AdventureWorks 데이터베이스의 Person.Contact 테이블에서 직원 성을 Fuller로 업데이트합니다. updategram은 매핑 스키마를 지정하지 않습니다. 따라서 updategram은 기본 매핑을 사용합니다.

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

이전> 블록에 <설명된 레코드는 데이터베이스의 현재 레코드를 나타냅니다. updategram은 이전> 블록에 <지정된 모든 열 값을 사용하여 레코드를 검색합니다. 이 updategram <에서 이전> 블록은 ContactID 열만 제공하므로 updategram은 값만 사용하여 레코드를 검색합니다. 이 블록에 LastName 값을 추가하려는 경우 updategram은 ContactID 및 LastName 값을 모두 사용하여 검색합니다.

이 updategram <에서 After> 블록은 변경 중인 유일한 값이므로 LastName 열 값만 제공합니다.

updategram을 테스트하려면
  1. 위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 UpdateLastName.xml 저장합니다.

  2. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

B. updg:id 특성을 사용하여 여러 레코드 업데이트

이 예제에서 updategram은 AdventureWorks 데이터베이스의 HumanResources.Shift 테이블에서 다음 두 가지 업데이트를 수행합니다.

  • 오전 7시에 시작하는 원래 일 교대 근무의 이름을 "Day"에서 "Early Morning"으로 변경합니다.

  • 오전 10시에 시작하는 "Late Morning"이라는 새 근무 시간을 삽입합니다.

updategram에서 updg:id 특성은 블록 앞><뒤><요소 간에 연결을 만듭니다.

<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 특성이 이전> 블록의 HumanResources.Shift> 요소<의 <첫 번째 인스턴스와 After> 블록의 HumanResources.Shift> 요소<의 <두 번째 인스턴스를 쌍으로 만드는 방법을 확인합니다.

updategram을 테스트하려면
  1. 위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 UpdateMultipleRecords.xml 저장합니다.

  2. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

C. 블록 앞>과 <뒤>의 여러 <항목 지정

모호성을 방지하기 위해 블록 쌍 앞><뒤>를 여러 <개 사용하여 예제 B에서 updategram을 작성할 수 있습니다. 쌍 전후>><를 지정하는 <것은 혼동을 최소화하면서 여러 업데이트를 지정하는 한 가지 방법입니다. 또한 각 이전> 및< 이후> 블록이< 최대 하나의 요소를 지정하는 경우 updg:id 특성을 사용할 필요가 없습니다.

참고 항목

쌍을 구성하려면 after 태그가< 태그 앞에> 해당하는 <태그 바로 뒤에 있어야 합니다.>

다음 updategram에서 쌍 앞과 <후>의 첫 번째 <>쌍은 교대 근무의 교대 근무 이름을 업데이트합니다. 두 번째 쌍은 새 시프트 레코드를 삽입합니다.

<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>  
updategram을 테스트하려면
  1. 위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 UpdateMultipleBeforeAfter.xml로 저장합니다.

  2. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

D. 여러 <동기화> 블록 지정

updategram에서 여러 <동기화> 블록을 지정할 수 있습니다. 지정된 각 <동기화> 블록은 독립적인 트랜잭션입니다.

다음 updategram에서 첫 번째 <동기화> 블록은 Sales.Customer 테이블의 레코드를 업데이트합니다. 간단히 하기 위해 updategram은 필요한 열 값만 지정합니다. ID 값(CustomerID) 및 업데이트되는 값(SalesPersonID)입니다.

두 번째 <동기화> 블록은 Sales.SalesOrderHeader 테이블에 두 개의 레코드를 추가합니다. 이 테이블의 경우 SalesOrderID는 IDENTITY 형식 열입니다. 따라서 updategram은 각 <Sales.SalesOrderHeader> 요소에서 SalesOrderID 값을 지정하지 않습니다.

두 번째 동기화>> 블록(트랜잭션)이 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>  
updategram을 테스트하려면
  1. 위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 UpdateMultipleSyncs.xml 저장합니다.

  2. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

E. 매핑 스키마 사용

이 예제에서 updategram은 매핑 스키마 특성을 사용하여 매핑 스키마 를 지정합니다. (기본 매핑은 없습니다. 즉, 매핑 스키마는 updategram의 요소와 특성을 데이터베이스 테이블 및 열에 필요한 매핑을 제공합니다.)

updategram에 지정된 요소와 특성은 매핑 스키마의 요소 및 특성을 참조합니다.

다음 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)는 다음 updategram에 지정됩니다. updategram은 Sales.SalesOrderDetail 테이블에 특정 주문에 대한 주문 세부 정보 항목을 추가합니다. updategram에는 Order> 요소< 내에< 중첩된 OD> 요소인 중첩된 요소가 포함됩니다. 이러한 두 요소 간의 기본 키/외래 키 관계는 매핑 스키마에 지정됩니다.

<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>  
updategram을 테스트하려면
  1. 위의 매핑 스키마를 복사하여 텍스트 파일에 붙여넣습니다. 파일을 UpdategramMappingSchema.xml 저장합니다.

  2. 위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 매핑 스키마(UpdategramMappingSchema.xml)를 저장하는 데 사용된 것과 동일한 폴더에 파일을 UpdateWithMappingSchema.xml 저장합니다.

  3. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

매핑 스키마 를 사용하는 updategram에 대한 자세한 예제는 Updategram에서 주석이 추가된 매핑 스키마 지정(SQLXML 4.0)을 참조하세요.

F. IDREFS 특성이 있는 매핑 스키마 사용

이 예제에서는 updategrams가 매핑 스키마의 IDREFS 특성을 사용하여 여러 테이블의 레코드를 업데이트하는 방법을 보여 줍니다. 이 예제에서는 데이터베이스가 다음 테이블로 구성되어 있다고 가정합니다.

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

학생이 많은 과정에 등록할 수 있고 과정에 많은 학생이 있을 수 있으므로 이 M:N 관계를 나타내려면 세 번째 테이블인 등록 테이블이 필요합니다.

다음 XSD 매핑 스키마는 Student>,< Course><Enrollment> 요소를 사용하여 <테이블의 XML 보기를 제공합니다. 매핑 스키마의 IDREFS 특성은 이러한 요소 간의 관계를 지정합니다. Course> 요소의< StudentIDList 특성은 등록 테이블의 StudentID 열을 참조하는 IDREFS 형식 특성입니다. 마찬가지로 Student 요소의 EnrollmentedIn 특성><등록 테이블의 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>  

updategram에서 이 스키마를 지정하고 강좌 테이블에 레코드를 삽입할 때마다 updategram은 과정 테이블에 새 과정 레코드를 삽입합니다. StudentIDList 특성에 대해 하나 이상의 새 학생 ID를 지정하는 경우 updategram은 각 새 학생에 대한 레코드를 등록 테이블에 삽입합니다. updategram은 등록 테이블에 중복 항목이 추가되지 않도록 합니다.

updategram을 테스트하려면
  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. 이전 단계에서 매핑 스키마를 저장하는 데 사용된 것과 동일한 폴더에 updategram(SampleUpdategram)을 저장합니다. (이 updategram은 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)를 만들고 사용하여 updategram을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

  6. 이전 단계에서 설명한 대로 다음 updategram을 저장하고 실행합니다. Updategram은 등록 테이블에 레코드를 추가하여 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. 이전 단계에서 설명한 대로 이 다음 updategram을 저장하고 실행합니다. 이 Updategram은 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>  

매핑 스키마 를 사용하는 updategram에 대한 자세한 예제는 Updategram에서 주석이 추가된 매핑 스키마 지정(SQLXML 4.0)을 참조하세요.

참고 항목

Updategram 보안 고려 사항(SQLXML 4.0)