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

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database

Puede modificar (insertar, actualizar o eliminar) una base de datos en desde un documento XML existente mediante un diagrama de actualización Microsoft SQL Server 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 asume que está familiarizado con la compatibilidad de las plantillas y el esquema de asignación de SQL Server. Para obtener más información, vea Introducción a los esquemas XSD anotados (SQLXML 4.0). Para las aplicaciones heredadas que usan XDR, vea 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 , y , existen en el espacio de nombres <sync> <before> <after> 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 del diagrama de actualización.

Revisar la sintaxis

Un diagrama de actualización es una plantilla con <sync> <before> bloques , y <after> 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:

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

<after>
Identifica el nuevo estado al que van a cambiarse los datos.

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

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

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

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

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

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 asume una asignación implícita (la asignación predeterminada), donde cada elemento del bloque o bloque se asigna a una tabla y el elemento secundario o atributo de cada elemento se asigna a una columna de la base de <before> <after> 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 se asigna a la tabla Sales.Customer y los atributos CustomerID y SalesPersonID se asignan a las columnas correspondientes de la <Sales.Customer> 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 en función de la relación de elementos primarios y secundarios 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 <Person.Contact> elemento contiene los elementos secundarios y <FirstName> <LastName> . Estos elementos secundarios son propiedades del <Person.Contact> elemento .

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 se asigna a la tabla Person.Contact y sus elementos secundarios se asignan a las columnas FirstName y <Person.Contact> 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 <Person.Contact> elemento consta de los atributos FirstName y LastName. Estos atributos son las propiedades del <Person.Contact> elemento . 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 a la tabla Person.Contact y los atributos del elemento a las columnas respectivas de la <Person.Contact> 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 <Person.Contact> elemento 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 <LastName> elemento secundario 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 pero que no son identificadores XML válidos, use "__xHHHH" como valor de codificación, donde HHHH representa el código SQL Server _ UCS-2 hexadecimal de cuatro dígitos para el carácter en el orden más significativo de primero en _ bits. Con este esquema de codificación, un carácter de espacio se reemplaza por x0020 (el código hexadecimal de cuatro dígitos para un carácter de espacio); Por lo tanto, el nombre de tabla [Order Details] en SQL Server se convierte _x005B_Order_x0020_Details_x005D en _ XML.

De forma similar, es posible que tenga que especificar nombres de elementos de tres partes, como <[database].[owner].[table]> . Dado que los caracteres de corchete ([ y ]) no son válidos en XML, debe especificarlo como , donde _x005B es la codificación para el corchete izquierdo ([) y _x005D es la codificación del corchete derecho <_x005B_database_x005D_._x005B_owner_x005D_._x005B_table_x005D_> _ _ (]).

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 del diagrama (SQLXML 4.0)