Compartilhar via


Atualizando dados usando updategramas XML (SQLXML 4.0)

Ao atualizar os dados existentes, você deve especificar os <blocos antes> e <depois> . Os elementos especificados nos <blocos antes> e <depois> descrevem a alteração desejada. O updategram usa os elementos especificados no <bloco anterior> para identificar os registros existentes no banco de dados. Os elementos correspondentes no bloco após> indicam< como os registros devem ficar após a execução da operação de atualização. A partir dessas informações, o updategram cria uma instrução SQL que corresponde ao <bloco após> . Em seguida, o updategram usa essa instrução para atualizar o banco de dados.

Este é o formato do updategram para uma operação de atualização:

<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>
Os elementos no <bloco anterior> identificam registros existentes nas tabelas de banco de dados.

<updg:after>
Os elementos no <bloco após> descrevem como os registros especificados no <bloco anterior> devem ficar após a aplicação das atualizações.

O mapping-schema atributo identifica o esquema de mapeamento a ser usado pelo updategram. Se o diagrama de atualização especificar um esquema de mapeamento, os nomes de elemento e atributo especificados nos <blocos antes> e <depois> deverão corresponder aos nomes no esquema. O esquema de mapeamento mapeia esses nomes de elemento ou atributo para os nomes de tabela e coluna do banco de dados.

Se um updategram não especificar um esquema, o updategam usará o mapeamento padrão. No mapeamento padrão, o <ElementName> especificado no diagrama de atualização é mapeado para a tabela de banco de dados e os elementos ou atributos filho são mapeados para as colunas de banco de dados.

Um elemento no <bloco anterior> deve corresponder a apenas uma linha de tabela no banco de dados. Se o elemento corresponder a várias linhas de tabela ou não corresponder a nenhuma linha de tabela, o updategrama retornará um erro e cancelará todo <o bloco de sincronização> .

Um diagrama de atualização pode incluir vários blocos <de sincronização> . Cada <bloco de sincronização> é tratado como uma transação. Cada <bloco de sincronização> pode ter vários blocos <antes> e <depois> . Por exemplo, se você estiver atualizando dois dos registros existentes, poderá especificar dois <pares antes> e <depois> , um para cada registro que está sendo atualizado.

Usando o atributo updg:id

Quando vários elementos forem especificados nos <blocos antes> e <depois> , use o updg:id atributo para marcar linhas nos <blocos antes> e <depois> . A lógica de processamento usa essas informações para determinar qual registro no <bloco anterior> emparelha com qual registro no <bloco após> .

O updg:id atributo não é necessário (embora recomendado) se houver um dos seguintes:

  • Os elementos no esquema de mapeamento especificado têm o sql:key-fields atributo definido neles.

  • Há um ou mais valores específicos fornecidos para os campos de chave no diagrama de atualização.

Se for o caso, o diagrama de atualização usará as colunas de chave especificadas para sql:key-fields emparelhar os elementos nos <blocos antes> e <depois> .

Se o esquema de mapeamento não identificar colunas de chave (usando sql:key-fields) ou se o updategrama estiver atualizando um valor de coluna de chave, você deverá especificar updg:id.

Os registros identificados nos <blocos antes> e <depois> não precisam estar na mesma ordem. O updg:id atributo força a associação entre os elementos especificados nos <blocos antes> e <depois> .

Se você especificar um elemento no <bloco anterior> e apenas um elemento correspondente no <bloco após> , o uso updg:id não será necessário. No entanto, é recomendável que você especifique updg:id de qualquer maneira para evitar ambiguidade.

Exemplos

Antes de usar os exemplos de updategram, observe o seguinte:

  • A maioria dos exemplos usa mapeamento padrão (ou seja, nenhum esquema de mapeamento é especificado no updategram). Para obter mais exemplos de diagramas de atualização que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um updategrama (SQLXML 4.0).

  • A maioria dos exemplos usa o banco de dados de exemplo adventureworks. Todas as atualizações são aplicadas às tabelas neste banco de dados. Você pode restaurar o banco de dados AdventureWorks.

Um. Atualizando um registro

O diagrama de atualização a seguir atualiza o sobrenome do funcionário para Fuller na tabela Person.Contact no banco de dados AdventureWorks. O updategram não especifica nenhum esquema de mapeamento; portanto, o diagrama de atualização usa o mapeamento padrão.

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

O registro descrito no <bloco anterior> representa o registro atual no banco de dados. O updategram usa todos os valores de coluna especificados no <bloco anterior> para pesquisar o registro. Neste updategram, o <bloco anterior> fornece apenas a coluna ContactID; portanto, o updategram usa apenas o valor para pesquisar o registro. Se você adicionar o valor de LastName a esse bloco, o updategram usará os valores ContactID e LastName para pesquisar.

Neste diagrama de atualização, o <bloco após> fornece apenas o valor da coluna LastName porque esse é o único valor que está sendo alterado.

Para testar o updategram
  1. Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como UpdateLastName.xml.

  2. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

B. Atualizando vários registros usando o atributo updg:id

Neste exemplo, o updategram executa duas atualizações na tabela HumanResources.Shift no banco de dados AdventureWorks:

  • Ele altera o nome do turno do dia original que começa às 7:00 da manhã de "Dia" para "Manhã Antecipada".

  • Ele insere um novo turno chamado "Late Morning" que começa às 10h00.

No diagrama de atualização, o updg:id atributo cria associações entre elementos nos <blocos antes> e <depois> .

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

Observe como o updg:id atributo emparelha a primeira instância do <elemento HumanResources.Shift> no <bloco anterior> com a segunda instância do <elemento HumanResources.Shift> no <bloco após> .

Para testar o updategram
  1. Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como UpdateMultipleRecords.xml.

  2. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

C. Especificando vários blocos <antes> e <depois>

Para evitar ambiguidade, você pode escrever o diagrama de atualização no exemplo B usando vários <pares de blocos antes> e <depois> . Especificar <pares antes> e <depois> é uma maneira de especificar várias atualizações com um mínimo de confusão. Além disso, se cada um dos <blocos antes> e <depois> especificar no máximo um elemento, você não precisará usar o updg:id atributo.

Observação

Para formar um par, a <marca posterior> deve seguir imediatamente seu correspondente <antes> da marca.

No diagrama de atualização a seguir, o primeiro <par antes> e <depois> atualiza o nome do turno do dia. O segundo par insere um novo registro de turno.

<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>  
Para testar o updategram
  1. Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como UpdateMultipleBeforeAfter.xml.

  2. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

D. Especificando vários blocos <de sincronização>

Você pode especificar vários <blocos de sincronização> em um updategram. Cada <bloco de sincronização> especificado é uma transação independente.

No diagrama de atualização a seguir, o primeiro <bloco de sincronização> atualiza um registro na tabela Sales.Customer. Para simplificar, o updategrama especifica apenas os valores de coluna necessários; o valor de identidade (CustomerID) e o valor que está sendo atualizado (SalesPersonID).

O segundo <bloco de sincronização> adiciona dois registros à tabela Sales.SalesOrderHeader. Para esta tabela, SalesOrderID é uma coluna do tipo IDENTITY. Portanto, o updategram não especifica o valor de SalesOrderID em cada um dos <elementos Sales.SalesOrderHeader> .

Especificar vários <blocos de sincronização> é útil porque se o segundo <bloco de sincronização> (uma transação) falhar ao adicionar registros à tabela Sales.SalesOrderHeader, o primeiro <bloco de sincronização> ainda poderá atualizar o registro do cliente na 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>  
Para testar o updategram
  1. Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como UpdateMultipleSyncs.xml.

  2. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

E. Usando um esquema de mapeamento

Neste exemplo, o updategram especifica um esquema de mapeamento usando o mapping-schema atributo. (Não há nenhum mapeamento padrão; ou seja, o esquema de mapeamento fornece o mapeamento necessário de elementos e atributos no updategram para as tabelas e colunas do banco de dados.)

Os elementos e atributos especificados no updategram referem-se aos elementos e atributos no esquema de mapeamento.

O esquema de mapeamento XSD a seguir tem <elementos Customer>, <Order> e <OD> que são mapeados para as tabelas Sales.Customer, Sales.SalesOrderHeader e Sales.SalesOrderDetail no banco de dados.

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

Esse esquema de mapeamento (UpdategramMappingSchema.xml) é especificado no seguinte updategram. O updategram adiciona um item de detalhes de pedido na tabela Sales.SalesOrderDetail para um pedido específico. O updategram inclui elementos aninhados: um <elemento OD> aninhado dentro de um <elemento Order> . A relação chave primária/chave estrangeira entre esses dois elementos é especificada no esquema de mapeamento.

<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>  
Para testar o updategram
  1. Copie o esquema de mapeamento acima e cole-o em um arquivo de texto. Salve o arquivo como UpdategramMappingSchema.xml.

  2. Copie o modelo de updategram acima e cole-o em um arquivo de texto. Salve o arquivo como UpdateWithMappingSchema.xml na mesma pasta usada para salvar o esquema de mapeamento (UpdategramMappingSchema.xml).

  3. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

Para obter mais exemplos de diagramas de atualização que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um updategrama (SQLXML 4.0).

F. Usando um esquema de mapeamento com atributos IDREFS

Este exemplo ilustra como os updategramas usam os atributos IDREFS no esquema de mapeamento para atualizar registros em várias tabelas. Para este exemplo, suponha que o banco de dados consiste nas seguintes tabelas:

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

Como um aluno pode se inscrever em muitos cursos e um curso pode ter muitos alunos, a terceira tabela, a tabela Registro, é necessária para representar essa relação M:N.

O esquema de mapeamento XSD a seguir fornece uma exibição XML das tabelas usando os <elementos Student>, <Course> e <Enrollment> . Os atributos IDREFS no esquema de mapeamento especificam a relação entre esses elementos. O atributo StudentIDList no <elemento Course> é um atributo de tipo IDREFS que se refere à coluna StudentID na tabela Registro. Da mesma forma, o atributo EnrolledIn no <elemento Student> é um atributo de tipo IDREFS que se refere à coluna CourseID na tabela Registro.

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

Sempre que você especifica esse esquema em um updategram e insere um registro na tabela Curso, o programa de atualização insere um novo registro de curso na tabela Curso. Se você especificar uma ou mais novas IDs de aluno para o atributo StudentIDList, o programa de atualização também inserirá um registro na tabela Registro para cada novo aluno. O updategram garante que nenhuma duplicata seja adicionada à tabela Registro.

Para testar o updategram
  1. Crie estas tabelas no banco de dados especificado na raiz virtual:

    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. Adicione este exemplo de dados:

    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. Copie o esquema de mapeamento acima e cole-o em um arquivo de texto. Salve o arquivo como SampleSchema.xml.

  4. Salve o updategram (SampleUpdategram) na mesma pasta usada para salvar o esquema de mapeamento na etapa anterior. (Este programa de atualização remove um aluno com StudentID="1" do curso 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. Crie e use o Script de Teste do SQLXML 4.0 (Sqlxml4test.vbs) para executar o updategram.

    Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.

  6. Salve e execute o seguinte updategram, conforme descrito nas etapas anteriores. O programa de atualização adiciona o aluno com StudentID="1" de volta ao curso CS102 adicionando um registro na tabela Registro.

    <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. Salve e execute este próximo updategram, conforme descrito nas etapas anteriores. Este programa de atualização insere três novos alunos e os inscreve no curso CS101. Novamente, a relação IDREFS insere registros na tabela Registro.

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

Esse é o esquema XDR equivalente:

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

Para obter mais exemplos de diagramas de atualização que usam esquemas de mapeamento, consulte Especificando um esquema de mapeamento anotado em um updategrama (SQLXML 4.0).

Consulte Também

Considerações sobre segurança do updategram (SQLXML 4.0)