Preparación de los datos para la exportación o importación en bloque

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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 tienes claro cómo dar formato a un archivo de datos para la importación en bloque, puedes 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 formatos de archivo 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 mediante 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.

  • SQL Server puede usar exámenes paralelos para recuperar los datos. Por lo tanto, no se garantiza que las filas de la tabla que se exportan de forma masiva desde una instancia de SQL Server estén en un orden específico en el archivo de datos. Para asegurarte de que las filas de la tabla exportada en bloque aparezcan en un determinado orden en el archivo de datos, usa la opción queryout para exportar en bloque desde una consulta y especifica una cláusula ORDER BY.

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 les puede cambiar el orden 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...), la tabla de destino ya debe existir.

  • 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, consulta Formatos de datos para la importación o la exportación masiva (SQL Server) y Especificar los formatos de datos para la compatibilidad al usar bcp (SQL Server).

    Nota:

    Para especificar un subconjunto de filas para importarlas desde un archivo de datos en lugar del archivo completo, puedes usar un comando bcp con el modificador -F <first_row> y/o el modificador -L <last_row>. Para obtener más información, consulte bcp Utility.

  • Para importar datos de archivos de datos con campos de longitud fija o ancho fijo, use un archivo de formato. Para obtener más información, vea XML, archivos de formato (SQL Server).

  • A partir de SQL Server 2017 (14.x), se puede usar un archivo CSV como archivo de datos para una importación masiva de datos en SQL Server. 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 desde un archivo de tabla (.dbf) de Microsoft FoxPro o Visual FoxPro o un archivo de hoja de cálculo (.xls) de Microsoft Excel, deberás convertir los datos en un archivo CSV que cumpla con las restricciones anteriores. La extensión de archivo normalmente será .csv. A continuación, se puede usar el archivo .csv como archivo de datos en una operación de importación masiva de SQL Server.

      En los sistemas de 32 bits (SQL Server 2014 (12.x) y versiones anteriores), puedes importar datos CSV en una tabla de SQL Server sin optimizaciones de importación masiva mediante 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. Para los datos CSV, uno de los parámetros del archivo schema.ini sería "FORMAT=CSVDelimited". Para usar esta solución, tendrías que entender cómo funciona Jet Text IISAM (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 más información, consulte 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 el proveedor OLE DB 4.0 de Jet para conectarse a bases de datos ISAMy cómo abrir archivos de texto delimitados usando texto del proveedor de Jet IIsam.

Además, la importación masiva de datos desde un archivo de datos a una tabla tiene los siguientes requisitos:

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

  • Cuando se hace una importación de datos masiva mediante BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), es necesario tener acceso al archivo de datos para las operaciones de lectura ya sea por el perfil de seguridad del proceso de SQL Server (si el usuario inicia sesión con el inicio proporcionado por SQL Server) o por el inicio de sesión de Microsoft Windows que se utiliza bajo 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.