Introducción a la carga masiva XML (SQLXML 4.0)

Carga masiva XML es un objeto COM independiente que permite cargar datos XML semiestructurados en tablas de Microsoft SQL Server.

Puede insertar datos XML en una base de datos de SQL Server mediante una instrucción INSERT y la función OPENXML; sin embargo, la utilidad Carga masiva proporciona mejor rendimiento cuando es necesario insertar grandes cantidades de datos XML.

El método Execute del modelo de objetos Carga masiva XML toma dos parámetros:

  • Una definición de esquema XML anotado (XSD) o un esquema reducido de datos XML (XDR). La utilidad Carga masiva XML interpreta este esquema de asignación y las anotaciones que se especifican en el esquema para identificar las tablas de SQL Server donde se insertarán los datos XML.

  • Un documento o fragmento de documento XML (un fragmento de documento es un documento sin un elemento de nivel superior único). Se puede especificar un nombre de archivo o una secuencia de la que Carga masiva XML pueda leer.

Carga masiva XML interpreta el esquema de asignación e identifica las tablas donde se insertarán los datos XML.

Se supone que está familiarizado con las siguientes características de SQL Server:

Transmitir datos XML por secuencias

Dado que el documento XML de origen puede ser grande, en el procesamiento de carga masiva no se carga en memoria todo el documento. En su lugar, Carga masiva XML interpreta los datos XML como una secuencia y la lee. A medida que la utilidad lee los datos, identifica las tablas de base de datos, genera los registros adecuados a partir del origen de datos XML y, a continuación, envía los registros a SQL Server para la inserción.

Por ejemplo, el siguiente documento XML de origen está compuesto de elementos <Customer> y de elementos secundarios <Order>:

<Customer ...>
    <Order.../>
    <Order .../>
     ...
</Customer>
...

Cuando Carga masiva XML lee el elemento <Customer>, genera un registro para la tabla Customer. Cuando lee la etiqueta final </Customer>, Carga masiva XML inserta el registro en la tabla de SQL Server. De la misma manera, cuando lee el elemento <Order>, Carga masiva XML genera un registro para la tabla Order y, a continuación, inserta este registro en la tabla de SQL Server al leer la etiqueta final </Order>.

Operaciones de Carga masiva XML con y sin transacciones

Carga masiva XML puede funcionar tanto en modo con transacciones como en modo sin transacciones. El rendimiento es normalmente óptimo si la carga masiva se realiza en un modo sin transacciones: es decir, la propiedad Transaction se establece en FALSE y se cumple cualquiera de las condiciones siguientes:

  • Las tablas donde se realiza la carga masiva de los datos están vacías y no tienen índices.

  • Las tablas tienen datos e índices únicos.

El enfoque sin transacciones no garantiza una reversión si se produce algún error en el proceso de carga masiva (si bien se pueden producir reversiones parciales). La carga masiva sin transacciones es adecuada cuando la base de datos está vacía. Por tanto, si algo sale mal, puede limpiar la base de datos e iniciar de nuevo Carga masiva XML.

Nota

En modo sin transacciones, Carga masiva XML utiliza una transacción interna predeterminada y la confirma. Cuando la propiedad Transaction se establece en TRUE, Carga masiva XML no ejecuta la confirmación en esta transacción.

Si la propiedad Transaction se establece en TRUE, Carga masiva XML crea archivos temporales, uno por cada tabla que se identifica en el esquema de asignación. Carga masiva XML almacena en primer lugar los registros del documento XML de origen en estos archivos temporales. A continuación, la instrucción BULK INSERT de Transact-SQL recupera estos registros de los archivos y los almacena en las tablas correspondientes. Puede especificar la ubicación de estos archivos temporales mediante la propiedad TempFilePath. Debe asegurarse de que la cuenta de SQL Server que se utiliza con Carga masiva XML tiene acceso a esta ruta. Si no se especifica la propiedad TempFilePath, se utiliza la ruta de acceso de archivo predeterminada que se especifica en la variable de entorno TEMP para crear los archivos temporales.

Si la propiedad Transaction se establece en FALSE (configuración predeterminada), Carga masiva XML utiliza la interfaz OLE DB IRowsetFastLoad para realizar la carga masiva de los datos.

Si la propiedad ConnectionString establece la cadena de conexión y la propiedad Transaction se establece en TRUE, Carga masiva XML funciona en su propio contexto de transacciones. (Por ejemplo, Carga masiva XML inicia su propia transacción y confirma o revierte según corresponda.)

Si la propiedad ConnectionCommand establece la conexión con un objeto de conexión existente y la propiedad Transaction se establece en TRUE, Carga masiva XML no emite instrucciones COMMIT ni ROLLBACK cuando el procesamiento finaliza de manera correcta o incorrecta, respectivamente. Si se produce un error, Carga masiva XML devuelve el mensaje de error adecuado. La decisión de emitir una instrucción COMMIT o ROLLBACK queda en manos del cliente que inició la carga masiva. El objeto de conexión que se utiliza para Carga masiva XML debe ser del tipo ICommand o un objeto de comando ADO.

En SQLXML 4.0, no se puede utilizar ConnectionObject con la propiedad Transaction establecida en FALSE. El modo sin transacciones no se admite con ConnectionObject porque es imposible abrir más de una interfaz IRowsetFastLoad en una sesión pasada.