Compartir por


Actualizar datos con diagramas de actualización XML (SQLXML 4.0)

Se aplica a: SQL ServerAzure SQL Database

Al actualizar los datos existentes, debe especificar los bloques antes> y <después>.< Los elementos especificados en los bloques antes> y <después> de describen el cambio deseado.< El diagrama de actualización usa los elementos especificados en el <bloque anterior> para identificar los registros existentes en la base de datos. Los elementos correspondientes del <bloque después> indican cómo deben buscarse los registros después de ejecutar la operación de actualización. A partir de esta información, el diagrama de actualización crea una instrucción SQL que coincide con el bloque after>.< A continuación, el diagrama de actualización utiliza esta instrucción para actualizar la base de datos.

Este es el formato del diagrama de actualización para una operación de actualización:

<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>
Los elementos del <bloque anterior> identifican los registros existentes en las tablas de base de datos.

<updg:after>
Los elementos del bloque after> describen cómo deben aplicarse las actualizaciones los registros especificados en el< bloque anterior>.<

El atributo mapping-schema identifica el esquema de asignación que va a usar el diagrama de actualización. Si el diagrama de actualización especifica un esquema de asignación, los nombres de elemento y atributo especificados en los bloques antes> y <después> deben coincidir con los nombres del esquema.< El esquema de asignación asigna estos nombres de elementos o atributos a los nombres de columnas y tablas de base de datos.

Si un diagrama de actualización no especifica un esquema, utilizará la asignación predeterminada. En la asignación predeterminada, el <ElementName> especificado en el diagrama de actualización se asigna a la tabla de base de datos y los elementos o atributos secundarios se asignan a las columnas de la base de datos.

Un elemento del <bloque anterior> debe coincidir con una sola fila de tabla de la base de datos. Si el elemento coincide con varias filas de tabla o no coincide con ninguna fila de tabla, el diagrama de actualización devuelve un error y cancela todo el bloque de sincronización>.<

Un diagrama de actualización puede incluir varios <bloques de sincronización> . Cada <bloque de sincronización> se trata como una transacción. Cada bloque de sincronización> puede tener varios <bloques antes> y< después>.< Por ejemplo, si va a actualizar dos de los registros existentes, puede especificar dos <pares antes> y <después> , uno para cada registro que se actualiza.

Utilizar el atributo updg:id

Cuando se especifican varios elementos en los <bloques antes> y después>, use el atributo updg:id para marcar las filas de los< bloques antes> y<< después.> La lógica de procesamiento usa esta información para determinar qué registro de los bloques anteriores> se emparejan con qué registro del <bloque después>.<

El atributo updg:id no es necesario (aunque se recomienda) si existe alguna de las siguientes opciones:

  • Los elementos del esquema de asignación especificado tienen el atributo sql:key-fields definido en ellos.

  • Hay uno o más valores concretos proporcionados para los campos de clave del diagrama de actualización.

Si alguno de los casos es así, el diagrama de actualización usa las columnas de clave especificadas en los campos sql:key-fields para emparejar los elementos de los <bloques antes> y <después.>

Si el esquema de asignación no identifica las columnas de clave (mediante sql:key-fields) o si el diagrama de actualización actualiza un valor de columna de clave, debe especificar updg:id.

Los registros que se identifican en los bloques antes> y< después> no tienen que estar en el mismo orden.< El atributo updg:id fuerza la asociación entre los elementos especificados en los <bloques antes> y <después> .

Si especifica un elemento en el bloque anterior> y solo un elemento correspondiente en el <bloque posterior>, no es necesario usar updg:id.< Sin embargo, se recomienda especificar updg:id de todos modos para evitar ambigüedad.

Ejemplos

Antes de utilizar los ejemplos del diagrama de actualización, tenga en cuenta lo siguiente:

  • En la mayoría de los ejemplos se usa una asignación predeterminada (es decir, no se especifica ningún esquema de asignación en el diagrama de actualización). Para obtener más ejemplos de diagramas de actualización que usan esquemas de asignación, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).

  • La mayoría de los ejemplos utilizan la base de datos de ejemplo AdventureWorks. Todas las actualizaciones se aplican a las tablas de esta base de datos. Puede restaurar la base de datos AdventureWorks.

A Actualizar un registro

El siguiente diagrama de actualización actualiza el apellido del empleado a Fuller en la tabla Person.Contact de la base de datos AdventureWorks. El diagrama de actualización no especifica ningún esquema de asignación, por lo que utilizará la asignación predeterminada.

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

El registro descrito en el <bloque anterior> representa el registro actual en la base de datos. El diagrama de actualización usa todos los valores de columna especificados en el <bloque anterior> para buscar el registro. En este diagrama de actualización, el <bloque anterior> solo proporciona la columna ContactID; por lo tanto, el diagrama de actualización solo usa el valor para buscar el registro. Si fuera a agregar el valor LastName a este bloque, el diagrama de actualización utilizaría los valores ContactID y LastName para buscar.

En este diagrama de actualización, el <bloque after> proporciona solo el valor de la columna LastName porque es el único valor que se está cambiando.

Para probar el diagrama de actualización
  1. Copie la plantilla de diagrama de actualización anterior y péguela en un archivo de texto. Guarde el archivo como UpdateLastName.xml.

  2. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

B. Actualizar varios registros utilizando el atributo updg:id

En este ejemplo, el diagrama de actualización realiza dos actualizaciones en la tabla HumanResources.Shift de la base de datos AdventureWorks:

  • Cambia el nombre del turno de día original, que empieza a las 7:00 a. m., de "Day" a "Early Morning".

  • Inserta un nuevo turno denominado "Late Morning" que empieza a las 10:00 a. m.

En el diagrama de actualización, el atributo updg:id crea asociaciones entre los elementos de los <bloques antes> y <después.>

<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 cómo el atributo updg:id empareja la primera instancia del <elemento HumanResources.Shift> en el <bloque anterior> con la segunda instancia del <elemento HumanResources.Shift> en el <bloque después.>

Para probar el diagrama de actualización
  1. Copie la plantilla de diagrama de actualización anterior y péguela en un archivo de texto. Guarde el archivo como UpdateMultipleRecords.xml.

  2. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

C. Especificar varios <bloques antes> y <después>

Para evitar ambigüedad, puede escribir el diagrama de actualización en el ejemplo B mediante el uso de varios pares de bloques antes> y <después>.< Especificar pares antes> y< después> es una manera de especificar varias actualizaciones con un mínimo de confusión.< Además, si cada uno de los bloques antes> y <después> especifica como máximo un elemento, no tiene que usar el atributo updg:id.<

Nota:

Para formar un par, la <etiqueta after> debe seguir inmediatamente su correspondiente <antes> de la etiqueta.

En el siguiente diagrama de actualización, el primero antes ><y< después> del par actualiza el nombre del turno del día. El segundo par inserta un nuevo 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 probar el diagrama de actualización
  1. Copie la plantilla de diagrama de actualización anterior y péguela en un archivo de texto. Guarde el archivo como UpdateMultipleBeforeAfter.xml.

  2. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

D. Especificación de varios <bloques de sincronización>

Puede especificar varios <bloques de sincronización> en un diagrama de actualización. Cada <bloque de sincronización> especificado es una transacción independiente.

En el siguiente diagrama de actualización, el primer <bloque de sincronización> actualiza un registro en la tabla Sales.Customer. Para que resulte más sencillo, el diagrama de actualización especifica solamente los valores de columna necesarios; el valor de identidad (CustomerID) y el valor que se está actualizando (SalesPersonID).

El segundo <bloque de sincronización> agrega dos registros a la tabla Sales.SalesOrderHeader. En esta tabla, SalesOrderID es una columna de tipo IDENTITY. Por lo tanto, el diagrama de actualización no especifica el valor de SalesOrderID en cada uno de los <elementos Sales.SalesOrderHeader> .

Especificar varios bloques de sincronización es útil porque si el segundo <bloque de sincronización>> (una transacción) no puede agregar registros a la tabla Sales.SalesOrderHeader, el primer< bloque de sincronización> todavía puede actualizar el registro de cliente en la tabla 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 probar el diagrama de actualización
  1. Copie la plantilla de diagrama de actualización anterior y péguela en un archivo de texto. Guarde el archivo como UpdateMultipleSyncs.xml.

  2. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

E. Usar un esquema de asignación

En este ejemplo, el diagrama de actualización especifica un esquema de asignación mediante el atributo mapping-schema . (No hay ninguna asignación predeterminada; es decir, el esquema de asignación proporciona la asignación necesaria de elementos y atributos en el diagrama de actualización a las tablas y columnas de base de datos.)

Los elementos y atributos especificados en el diagrama de actualización hacen referencia a los elementos y atributos del esquema de asignación.

El siguiente esquema de asignación XSD tiene <elementos Customer>, <Order> y< OD> que se asignan a las tablas Sales.Customer, Sales.SalesOrderHeader y Sales.SalesOrderDetail de la base de datos.

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

Este esquema de asignación (UpdategramMappingSchema.xml) se especifica en el siguiente diagrama de actualización. El diagrama de actualización agrega un elemento de detalle de pedido en la tabla Sales.SalesOrderDetail para un pedido concreto. El diagrama de actualización incluye elementos anidados: un <elemento de OD> anidado dentro de un< elemento Order>. La relación de clave principal/clave externa entre estos dos elementos se especifica en el esquema de asignación.

<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 probar el diagrama de actualización
  1. Copie el esquema de asignación anterior y péguelo en un archivo de texto. Guarde el archivo como UpdategramMappingSchema.xml.

  2. Copie la plantilla de diagrama de actualización anterior y péguela en un archivo de texto. Guarde el archivo como UpdateWithMappingSchema.xml en la misma carpeta que se utilizó para guardar el esquema de asignación (UpdategramMappingSchema.xml).

  3. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

Para obtener más ejemplos de diagramas de actualización que usan esquemas de asignación, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).

F. Usar un esquema de asignación con atributos IDREFS

En este ejemplo se muestra cómo los diagramas de actualización utilizan los atributos IDREFS en el esquema de asignación para actualizar registros en varias tablas. En este ejemplo, suponga que la base de datos está compuesta de las tablas siguientes:

  • Student(StudentID, LastName)

  • Course(CourseID, CourseName)

  • Enrollment(StudentID, CourseID)

Dado que un alumno se puede inscribir en muchos cursos y un curso puede tener muchos alumnos, hace falta una tercera tabla, la tabla Enrollment, que represente esta relación M:N.

El siguiente esquema de asignación XSD proporciona una vista XML de las tablas mediante los elementos Student>, <Course> y< Enrollment>.< Los atributos IDREFS del esquema de asignación especifican la relación entre estos elementos. El atributo StudentIDList del <elemento Course> es un atributo de tipo IDREFS que hace referencia a la columna StudentID de la tabla Enrollment. Del mismo modo, el atributo En enrollIn en el< elemento Student> es un atributo de tipo IDREFS que hace referencia a la columna CourseID de la tabla Enrollment.

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

Cada vez que especifique este esquema en un diagrama de actualización e inserte un registro en la tabla Course, el diagrama de actualización insertará un nuevo registro de curso en la tabla Course. Si especifica uno o más identificadores de alumnos nuevos para el atributo StudentIDList, el diagrama de actualización también insertará un registro en la tabla Enrollment para cada nuevo alumno. El diagrama de actualización asegura que no se agregan registros duplicados a la tabla Enrollment.

Para probar el diagrama de actualización
  1. Cree estas tablas en la base de datos especificada en la raíz 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. Agregue estos datos de ejemplo:

    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 el esquema de asignación anterior y péguelo en un archivo de texto. Guarde el archivo como SampleSchema.xml.

  4. Guarde el diagrama de actualización (SampleUpdategram) en la misma carpeta utilizada para guardar el esquema de asignación en el paso anterior. (Este diagrama de actualización quita un alumno con StudentID = "1" del 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. Cree y use el script de prueba de SQLXML 4.0 (Sqlxml4test.vbs) para ejecutar el diagrama de actualización.

    Para obtener más información, consulte Uso de ADO para ejecutar consultas SQLXML 4.0.

  6. Guarde y ejecute el siguiente diagrama de actualización tal y como se describe en los pasos anteriores. El diagrama de actualización vuelve a incluir al alumno con StudentID = "1" en el curso CS102 agregando un registro en la tabla Enrollment.

    <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. Guarde y ejecute este siguiente diagrama de actualización como se describe en los pasos anteriores. Este diagrama de actualización inserta tres nuevos alumnos y los inscribe en el curso CS101. De nuevo, la relación IDREFS inserta registros en la tabla 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>  
    

Éste es el 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 obtener más ejemplos de diagramas de actualización que usan esquemas de asignación, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).

Consulte también

Consideraciones de seguridad sobre los diagramas de actualización (SQLXML 4.0)