Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 openXML Transact-SQL.
La función OPENXML modifica una base de datos quitando el documento XML existente y proporcionando un conjunto de filas que se puede pasar a una instrucción INSERT, UPDATE o DELETE. Con OPENXML, las operaciones se realizan directamente en las tablas de base de datos. Por lo tanto, OPENXML es más adecuado siempre que los proveedores de conjuntos de filas, como una tabla, puedan aparecer como 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 anotado (o XDR); 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, tiene la información necesaria para asignar elementos y atributos XML a las tablas y columnas de base de datos correspondientes. El diagrama de actualización usa esta información de asignación para actualizar las tablas y columnas de la 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 <la sincronización>, <antes> y <después>, existen en el urn:schemas-microsoft-com:xml-updategram espacio de nombres . El prefijo de espacio de nombres que se usa es arbitrario. En esta documentación, el updg prefijo denota el updategram espacio de nombres .
Revisión de 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 sencilla:
<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 (también denominado "el estado anterior") de la instancia de registro.
<después>
Identifica el nuevo estado al que se van a cambiar los datos.
<Sincronizar>
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 proporcionada por un esquema de asignación (se admiten esquemas XSD y 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 atributos del esquema de asignación.
Asignación implícita (predeterminada)
En la mayoría de los casos, un diagrama de actualización que realiza actualizaciones sencillas podría no requerir 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 la 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 (XSD o XDR), el diagrama de actualización usa el esquema para determinar las tablas y columnas de base de datos que se van a actualizar.
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 en el mapping-schema 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 (en relación con la ubicación 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 no se especifica el esquema de asignación 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 la 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 indican las propiedades del elemento. Por ejemplo, consulte el siguiente diagrama de actualización. 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>
Mapa centrado en atributos
En una asignación centrada en atributos, los elementos tienen atributos. En el diagrama de actualización siguiente se 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>
Uso de la asignación centrada en elementos y centrada en atributos
Puede especificar una combinación de asignaciones centradas en elementos y centradas en atributos, como se muestra en el siguiente diagrama de actualización. Observe que el <elemento Person.Contact> contiene un atributo y un elemento secundario. Además, 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 válidos en SQL Server, pero no 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 (]).
Ejecución de 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 maneras siguientes:
Al enviarlo en un comando de ADO.
Al enviarlo como un comando OLE DB.
Véase también
Consideraciones de seguridad del diagrama de actualización (SQLXML 4.0)