Compartir vía


Introducción a los diagramas de actualización (SQLXML 4.0)

Se aplica a: SQL Server Azure SQL Database

Puede modificar (insertar, actualizar o eliminar) una base de datos de Microsoft SQL Server desde un documento XML existente mediante un diagrama de actualización o la función Transact-SQL openXML.

La función OPENXML modifica una base de datos dividiendo el documento XML existente y proporcionando un conjunto de filas que puede pasarse a una instrucción INSERT, UPDATE o DELETE. Con OPENXML, las operaciones se realizan directamente en las tablas de la base de datos. Por lo tanto, el uso de OPENXML resulta más adecuado siempre que los proveedores de conjuntos de filas, como una tabla, puedan aparecer como un origen.

Al igual que OPENXML, un diagrama de actualización permite insertar, actualizar o eliminar datos en la base de datos; sin embargo, un diagrama de actualización funciona con las vistas XML proporcionadas por el esquema XSD (o XDR) anotado; por ejemplo, las actualizaciones se aplican a la vista XML proporcionada por el esquema de asignación. El esquema de asignación, a su vez, incluye la información necesaria para asignar elementos y atributos XML a las columnas y tablas de base de datos correspondientes. El diagrama de actualización usa esta información de asignación para actualizar las columnas y tablas de base de datos.

Nota:

En esta documentación se da por supuesto que está familiarizado con las plantillas y la compatibilidad con el esquema de asignación en SQL Server. Para obtener más información, vea Introducción a esquemas XSD anotados (SQLXML 4.0). Para las aplicaciones heredadas que usan XDR, consulte Esquemas XDR anotados (en desuso en SQLXML 4.0).

Espacios de nombres necesarios en el diagrama de actualización

Las palabras clave de un diagrama de actualización, como <sync>, <before> y <after>, existen en el espacio de nombres urn:schemas-microsoft-com:xml-updategram. Se usa un prefijo de espacio de nombres arbitrario. En esta documentación, el prefijo updg denota el espacio de nombres updategram .

Revisar la sintaxis

Un diagrama de actualización es una plantilla con <sincronización>,< antes> y< después> de los bloques que forman la sintaxis del diagrama de actualización. El código siguiente muestra esta sintaxis en su forma más simple:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema= "AnnotatedSchemaFile.xml"] >  
    <updg:before>  
        ...  
    </updg:before>  
    <updg:after>  
        ...  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Las definiciones siguientes describen el rol de cada uno de estos bloques:

<antes>
Identifica el estado existente (que también recibe el nombre de "estado before") de la instancia de registro.

<después>
Identifica el nuevo estado al que van a cambiarse los datos.

<sync>
Contiene los bloques antes> y< después>.< Un <bloque de sincronización> puede contener más de un conjunto de< bloques anteriores> y <posteriores.> Si hay más de un conjunto de <bloques anteriores> y <posteriores> , estos bloques (incluso si están vacíos) deben especificarse como pares. Además, un diagrama de actualización puede tener más de un bloque de sincronización>.< Cada <bloque de sincronización> es una unidad de transacción (lo que significa que todo el <bloque de sincronización> se realiza o no se hace nada). Si especifica varios bloques de sincronización> en un diagrama de actualización, el error de un< bloque de sincronización> no afecta a los demás< bloques de sincronización>.<

Si un diagrama de actualización elimina, inserta o actualiza una instancia de registro depende del contenido de los bloques antes> y <después>:<

  • Si una instancia de registro solo aparece en el <bloque anterior> sin ninguna instancia correspondiente en el <bloque posterior>, el diagrama de actualización realiza una operación de eliminación.

  • Si una instancia de registro solo aparece en el <bloque after> sin ninguna instancia correspondiente en el <bloque anterior>, es una operación de inserción.

  • Si una instancia de registro aparece en el <bloque anterior> y tiene una instancia correspondiente en el <bloque posterior>, es una operación de actualización. En este caso, el diagrama de actualización actualiza la instancia de registro a los valores especificados en el bloque after>.<

Especificar un esquema de asignación en el diagrama de actualización

En un diagrama de actualización, la abstracción XML que se proporciona con un esquema de asignación (se admiten tanto esquemas XSD como esquemas XDR) puede ser implícita o explícita (es decir, un diagrama de actualización puede funcionar con o sin un esquema de asignación especificado). Si no especifica un esquema de asignación, el diagrama de actualización supone una asignación implícita (la asignación predeterminada), donde cada elemento del bloque anterior> o <después> se asigna a una tabla y el elemento secundario o atributo de cada elemento se asigna a una columna de la base de datos.< Si especifica explícitamente un esquema de asignación, los elementos y atributos del diagrama de actualización deben coincidir con los elementos y los atributos del esquema de asignación.

Asignación implícita (predeterminada)

En la mayoría de los casos, es posible que un diagrama de actualización que realiza actualizaciones simples no requiera un esquema de asignación. En este caso, el diagrama de actualización se basa en el esquema de asignación predeterminado.

En el diagrama de actualización siguiente se muestra una asignación implícita. En este ejemplo, el diagrama de actualización inserta un nuevo cliente en la tabla Sales.Customer. Dado que este diagrama de actualización usa la asignación implícita, el <elemento Sales.Customer> se asigna a la tabla Sales.Customer y los atributos CustomerID y SalesPersonID se asignan a las columnas correspondientes de la tabla Sales.Customer.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
<updg:before>  
</updg:before>  
<updg:after>  
    <Sales.Customer CustomerID="1" SalesPersonID="277" />  
    </updg:after>  
</updg:sync>  
</ROOT>  

Asignación explícita

Si especifica un esquema de asignación (ya sea XSD o XDR), el diagrama de actualización usa dicho esquema para determinar las columnas y las tablas de base de datos que van a actualizarse.

Si el diagrama de actualización realiza una actualización compleja (por ejemplo, insertar registros en varias tablas sobre la base de la relación primario-secundario especificada en el esquema de asignación), debe proporcionar explícitamente el esquema de asignación mediante el atributo mapping-schema en el que se ejecuta el diagrama de actualización.

Dado que un diagrama de actualización es una plantilla, la ruta de acceso especificada para el esquema de asignación en el diagrama de actualización es relativa a la ubicación del archivo de plantilla (con respecto al lugar donde se almacena el diagrama de actualización). Para obtener más información, vea Especificar un esquema de asignación anotado en un diagrama de actualización (SQLXML 4.0).

Asignación centrada en elementos y centrada en atributos en diagramas de actualización

Con la asignación predeterminada (cuando el esquema de asignación no se especifica en el diagrama de actualización), los elementos del diagrama de actualización se asignan a tablas y los elementos secundarios (en el caso de la asignación centrada en elementos) y los atributos (en el caso de asignación centrada en atributos) se asignan a columnas.

Asignación centrada en elementos

En un diagrama de actualización centrado en elementos, un elemento contiene elementos secundarios que denotan las propiedades del elemento. Como ejemplo, consulte el diagrama de actualización siguiente. El <elemento Person.Contact> contiene los <elementos secundarios FirstName> y <LastName>. Estos elementos secundarios son propiedades del elemento Person.Contact>.<

Dado que este diagrama de actualización no especifica un esquema de asignación, el diagrama de actualización usa la asignación implícita, donde el <elemento Person.Contact> se asigna a la tabla Person.Contact y sus elementos secundarios se asignan a las columnas FirstName y LastName.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:after>  
    <Person.Contact>  
       <FirstName>Catherine</FirstName>  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

asignación centrada en atributos

En una asignación centrada en atributos, los elementos tienen atributos. El diagrama de actualización siguiente usa la asignación centrada en atributos. En este ejemplo, el <elemento Person.Contact> consta de los atributos FirstName y LastName . Estos atributos son las propiedades del elemento Person.Contact>.< Como en el ejemplo anterior, este diagrama de actualización no especifica ningún esquema de asignación, por lo que se basa en la asignación implícita para asignar el <elemento Person.Contact> a la tabla Person.Contact y los atributos del elemento a las columnas respectivas de la tabla.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" LastName="Abel" />  
  </updg:after>  
</updg:sync>  
</ROOT>  

Usar asignaciones centradas en elementos y centradas en atributos

Puede especificar una combinación de asignaciones centradas en elementos y asignaciones centradas en atributos, tal y como se muestra en el diagrama de actualización siguiente. Observe que el <elemento Person.Contact> contiene un atributo y un elemento secundario. Asimismo, este diagrama de actualización se basa en la asignación implícita. Por lo tanto, el atributo FirstName y el< elemento secundario LastName> se asignan a las columnas correspondientes de la tabla Person.Contact.

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
    <Person.Contact FirstName="Catherine" >  
       <LastName>Abel</LastName>  
    </Person.Contact>  
  </updg:after>  
</updg:sync>  
</ROOT>  

Trabajar con caracteres que son válidos en SQL Server pero que no son válidos en XML

En SQL Server, los nombres de tabla pueden incluir un espacio. Sin embargo, este tipo de nombre de tabla no es válido en XML.

Para codificar caracteres que son identificadores válidos de SQL Server, pero que no son identificadores XML válidos, use "__xHHHH__" como valor de codificación, donde HHHH representa el código UCS-2 hexadecimal de cuatro dígitos para el carácter en el orden de bits más significativo. Con este esquema de codificación, se reemplaza un carácter de espacio por x0020 (el código hexadecimal de cuatro dígitos para un carácter de espacio); por lo tanto, el nombre de tabla [Detalles del pedido] en SQL Server se convierte en _x005B_Order_x0020_Details_x005D_ en XML.

Del mismo modo, es posible que tenga que especificar nombres de elementos de tres partes, como <[base de datos].[ propietario]. [tabla]>. Dado que los caracteres de corchete ([ y ]) no son válidos en XML, debe especificarlo como <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_>, donde _x005B_ es la codificación para el corchete izquierdo ([) y _x005D_ es la codificación para el corchete derecho (]).

Ejecutar diagramas de actualización

Dado que un diagrama de actualización es una plantilla, todos los mecanismos de procesamiento de una plantilla se aplican al diagrama de actualización. Para SQLXML 4.0, puede ejecutar un diagrama de actualización de cualquiera de las siguientes formas:

  • Enviándolo en un comando ADO.

  • Enviándolo como un comando OLE DB.

Consulte también

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