Acerca de las operaciones de importación y exportación masivas

SQL Server admite la exportación masiva de datos desde una tabla de SQL Server y la importación masiva de datos en una tabla o vista sin particiones de SQL Server. Los métodos básicos disponibles son:

Método

Descripción

Importa datos

Exporta datos

bcp, utilidad

Utilidad de línea de comandos (Bcp.exe) que importa y exporta datos masivamente y genera archivos de formato.

BULK INSERT [instrucción]

Instrucción Transact-SQL que importa datos directamente de un archivo de datos en una tabla o vista sin particionar de una base de datos.

No

Instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) [instrucción]

Instrucción Transact-SQL que usa el proveedor de conjunto de filas BULK OPENROWSET para importar masivamente datos en una tabla de SQL Server especificando la función OPENROWSET(BULK…) para seleccionar datos en una instrucción INSERT.

No

Restricciones

Las operaciones de importación masiva de SQL Server no permiten importar los datos de los archivos de valores separados por comas (CSV). Sin embargo, en los sistemas de 32 bits, es posible importar los datos CSV en una tabla de SQL Server sin las optimizaciones de importación masiva utilizando OPENROWSET con el proveedor OLE DB para Jet. Jet trata los archivos de texto como tablas, con el esquema definido por un archivo schema.ini que se encuentra en el mismo directorio que el origen de datos. Con los datos CSV, uno de los parámetros del archivo schema.ini sería "FORMAT=CSVDelimited". Para utilizar esta solución, tendría que entender cómo funciona Jet Test IISAMm: la sintaxis de las cadenas de conexión, el uso de schema.ini, las opciones de los valores del Registro, etc.). Los orígenes que contienen la información más adecuada sobre esto son la Ayuda de Microsoft Access y los artículos de Knowledge Base (KB). Para obtener más información, vea los documentos que tratan sobre la inicialización del controlador de origen de datos de texto, cómo usar una consulta distribuida de SQL Server 7.0 con un servidor vinculado a bases de datos de acceso seguro, cómo usar Jet OLE DB Provider 4.0 para conectarse a bases de datos ISAM y cómo abrir archivos de texto delimitados usando texto del proveedor de Jet (en inglés).

Operación en proceso frente a fuera de proceso

La instrucción BULK INSERT y la función OPENROWSET(BULK) se ejecutan en proceso con SQL Server y comparten el mismo espacio de direcciones de memoria. Puesto que los archivos de datos se abren en un proceso de SQL Server, los datos no se copian entre el proceso del cliente y los procesos de SQL Server. Para obtener información sobre cuestiones relacionadas con la seguridad al importar datos utilizando BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), vea Importación masiva de datos mediante BULK INSERT u OPENROWSET(BULK...).

Por el contrario, la utilidad bcp se ejecuta fuera de proceso. Para mover datos entre los espacios de memoria de proceso, bcp debe utilizar el cálculo de referencias de datos entre procesos. El cálculo de referencias de datos entre procesosconsiste en convertir los parámetros de una llamada de método en una secuencia de bytes. Ello puede incrementar significativamente la carga del procesador. Sin embargo, como bcp analiza los datos y los convierte en el formato de almacenamiento nativo en el proceso del cliente, pueden descargar el análisis y la conversión de datos del proceso de SQL Server. En consecuencia, si tiene restricciones de CPU, puede obtener mejor rendimiento en la importación masiva en un equipo que tenga más de una CPU o en diferentes equipos, utilizando bcp en lugar de utilizar BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK).

Archivos de formato

La utilidad bcp, BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) admiten el uso de un archivo de formato especializado que almacena información de formato para cada campo de un archivo de datos. El archivo de formato puede contener también información acerca de la tabla de SQL Server correspondiente. El archivo de formato se puede utilizar para proporcionar toda la información de formato necesaria para la exportación e importación masivas de datos en una instancia de SQL Server.

Los archivos de formato proporcionan una forma flexible de interpretar los datos con el formato que tienen en el archivo de datos durante la importación, así como para dar formato a los datos del archivo de datos durante la exportación. Esta flexibilidad elimina la necesidad de escribir código para propósitos especiales con el fin de interpretar los datos o volver a darles formato según los requisitos específicos de SQL Server o la aplicación externa. Por ejemplo, si va a exportar masivamente datos que se van a cargar en una aplicación que requiere valores separados por comas, puede usar un archivo de formato para insertar comas como terminadores de campo en los datos exportados.

SQL Server 2005 y versiones posteriores admiten dos tipos de archivos de formato: archivos de formato XML y archivos de formato no XML. Los archivos de formato no XML se admiten en versiones anteriores de SQL Server; los archivos de formato XML eran nuevos en SQL Server 2005.

La única herramienta que puede generar un archivo de formato es la utilidad bcp. Para obtener más información, vea Crear un archivo de formato. Para obtener más información acerca de los archivos de formato, vea Archivos de formato para importar o exportar datos.

Nota

En aquellos casos en que no se suministra un archivo de formato durante una operación de exportación o importación masiva, el usuario puede invalidar el formato predeterminado en la línea de comandos.

El procesador de consultas y la importación masiva

Para importar masivamente datos en una instancia de SQL Server, la utilidad bcp y las instrucciones BULK INSERT y INSERT ... SELECT * FROM OPENROWSET(BULK...) [instrucción] funcionan con el procesador de consultas.

Los tres métodos convierten los datos de un archivo de datos en conjuntos de filas de OLE DB. Pero el método de conversión varía, como se muestra a continuación:

  • La utilidad bcp lee el archivo de datos y envía una secuencia TDS a la API del Bulk Copy Program o Programa de copia masiva (BCP) de SQL Server, que convierte los datos en conjuntos de filas de OLE DB.

  • BULK INSERT y el proveedor de conjuntos de filas bulk OPENROWSET convierten los datos de un archivo directamente en un conjunto de filas de OLE DB.

El procesador de consultas, que se encarga de planear y optimizar cada operación, inserta los conjuntos de filas de OLE DB en la tabla de destino.

Consideraciones de rendimiento

Las consideraciones de rendimiento pueden ser importantes si va a importar grandes cantidades de datos. En determinados casos, el rendimiento puede mejorar si modifica la forma en que una operación de importación o exportación masiva controla uno o varios de los siguientes elementos:

  • Modificadores de lotes

  • Comprobación de restricciones CHECK

  • Forma de registrar las transacciones masivas. Relevante para bases de datos que normalmente utilizan el modelo de recuperación completa.

  • Orden de los datos exportados

  • Importación de datos en paralelo

  • Bloqueo de tablas

  • Ejecución de desencadenadores

Para obtener más información, vea Optimizar el rendimiento de la importación masiva.

Nota

No existen técnicas especiales de optimización para las operaciones de exportación masiva. Estas operaciones simplemente seleccionan los datos de la tabla de origen con una instrucción SELECT.