Compartir a través de


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

Se aplica a: SQL ServerAzure SQL Database

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 un mejor rendimiento cuando necesita insertar grandes cantidades de datos XML.

El método Execute del modelo de objetos de 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 un flujo del 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 un flujo y lo lee. A medida que la utilidad lee los datos, identifica las tablas de base de datos, genera los registros adecuados desde el origen de datos XML y, a continuación, envía los registros a SQL Server para su inserción.

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

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

Como carga masiva XML lee el <elemento Customer> , genera un registro para Customertable. Cuando lee la etiqueta final /Customer>, la <carga masiva XML inserta ese registro en la tabla de SQL Server. De la misma manera, cuando lee el <elemento Order>, la carga masiva XML genera un registro para la tabla Ordertable y, a continuación, inserta ese 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 suele ser óptimo si se carga masivamente en un modo no transcretado: es decir, la propiedad Transaction se establece en FALSE) y se cumple alguna 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, la carga masiva XML no llama a la confirmación en esta transacción.

Si la propiedad Transaction se establece en TRUE, la carga masiva XML crea archivos temporales, uno para 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, una 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 usada con carga masiva XML tiene acceso a esta ruta de acceso. Si no se especifica la propiedad TempFilePath, se usa la ruta de acceso de archivo predeterminada especificada en la variable de entorno TEMP para crear los archivos temporales.

Si la propiedad Transaction se establece en FALSE (el valor predeterminado), la carga masiva XML usa la interfaz OLE DB IRowsetFastLoad para cargar los datos de forma masiva.

Si la propiedad ConnectionString establece el cadena de conexión y la propiedad Transaction se establece en TRUE, la carga masiva XML funciona en su propio contexto de transacción. (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, la carga masiva XML no emite una instrucción COMMIT o ROLLBACK en caso de éxito o error, 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 usa para la carga masiva XML debe ser de tipo ICommand o ser un objeto de comando de ADO.

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