Preparar los datos para exportar o importar de forma masiva

En esta sección se explican las consideraciones implicadas en el planeamiento de operaciones de exportación masiva y los requisitos para operaciones de importación masiva.

Nota

Si no está seguro de cómo dar formato a un archivo de datos para la importación masiva, puede usar la utilidad bcp para exportar los datos de la tabla a un archivo de datos. El formato de cada campo de datos de este archivo muestra el formato requerido para la importación masiva de datos en la columna correspondiente de la tabla. Use el mismo formato de los datos para los campos del archivo de datos.

Consideraciones sobre los archivos de datos para la exportación masiva

Antes de realizar una operación de exportación masiva mediante el comando bcp, tenga en cuenta lo siguiente:

  • Cuando se exportan los datos a un archivo, el comando bcp crea el archivo de datos automáticamente usando el nombre del archivo especificado. Si ese nombre de archivo ya se está usando, los datos que se están copiando masivamente en el archivo de datos sobrescriben el contenido existente del archivo.

  • La exportación masiva de una tabla o una vista en un archivo de datos requiere el permiso SELECT en la tabla o en la vista que está copiando de forma masiva.

  • Microsoft SQL Server puede usar exámenes paralelos para recuperar datos. Por tanto, no se garantiza que las filas de la tabla que se está exportando masivamente desde una instancia de SQL Server estén en un orden específico en el archivo de datos. Para asegurarse de que las filas de la tabla exportada masivamente aparezcan en un determinado orden en el archivo de datos, use la opción queryout para exportar masivamente desde una consulta y especifique una cláusula ORDER BY. Para obtener más información, vea Exportar datos de una consulta a un archivo de datos.

Requisitos de formato de los archivos de datos para la importación masiva

Para importar datos desde un archivo de datos, el archivo debe cumplir los siguientes requisitos básicos:

  • Los datos deben tener un formato de fila y columna.

Nota

No es necesario que la estructura del archivo de datos sea idéntica a la estructura de la tabla de SQL Server, ya que las columnas se pueden omitir o se puede cambiar el orden de las columnas durante el proceso de importación masiva.

  • El contenido del archivo de datos debe tener un formato admitido, como un formato de caracteres o nativo.

  • Los datos pueden estar en formato de caracteres o binario nativo, incluido Unicode.

  • Para importar datos mediante un comando bcp, una instrucción BULK INSERT o una instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) [instrucción]; es preciso que la tabla de destino ya exista.

  • Cada campo del archivo de datos debe ser compatible con la columna correspondiente de la tabla de destino. Por ejemplo, un campo int no puede cargarse en una columna datetime. Para obtener más información, vea Usar los formatos nativo, de caracteres o Unicode y Especificar formatos de datos por razones de compatibilidad mediante bcp.

    Nota

    Para especificar un subconjunto de filas para importarlas desde un archivo de datos, en lugar del archivo completo, puede usar un comando bcp con el modificador -F first_row y/o el modificador -L last_row. Para obtener más información, vea bcp (utilidad).

  • Para importar datos de archivos de datos con campos de longitud fija o ancho fijo, debe usar un archivo de formato. Para obtener más información, vea Descripción de los archivos de formato XML y Archivos de formato XML de ejemplo.

  • Las operaciones de importación masiva de SQL Server no admiten los archivos de valores separados por comas (CSV). Sin embargo, en algunos casos se puede utilizar un archivo de valores separados por comas (CSV) como archivo de datos para una importación masiva de datos en SQL Server. Tenga en cuenta que el terminador de campo de un archivo CSV no tiene que ser una coma. Para poderse utilizar como archivo de datos para la importación masiva, un archivo CSV debe observar las restricciones siguientes:

    • Los campos de datos no contienen nunca el terminador de campo.

    • Todos los valores de un campo de datos, o ninguno de ellos, están entre comillas ("").

    Para realizar la importación masiva de los datos de un archivo de tabla de Microsoft FoxPro o de Visual FoxPro (.dbf), o de un archivo de hoja de cálculo de Microsoft Excel (.xls), habría que convertir los datos en un archivo CSV que cumpliera las restricciones anteriores. La extensión de archivo normalmente será .csv. A continuación, podrá usar el archivo .csv como un archivo de datos en una operación de importación masiva de SQL Server.

    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 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.

Además, la importación masiva de datos desde un archivo de datos a una tabla requiere lo siguiente:

  • Los usuarios deben tener los permisos INSERT y SELECT para la tabla. Los usuarios también deben tener el permiso ALTER TABLE cuando utilicen opciones que requieren operaciones de lenguaje de definición de datos (DDL), como deshabilitar restricciones.

  • Al importar masivamente datos mediante BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), es necesario tener acceso al archivo de datos para opciones de lectura mediante el perfil de seguridad del proceso de SQL Server (si el usuario inicia sesión con el inicio de sesión de SQL Server proporcionado) o con el inicio de sesión de Microsoft que se utiliza con seguridad delegada. Adicionalmente, el usuario debe tener el permiso ADMINISTER BULK OPERATIONS para leer el archivo.

Nota

La importación masiva en una vista con particiones no está permitida y los intentos de importar datos masivamente en una vista con particiones generarán un error.