Nemanja Popovic

Técnicas para realizar una copia masiva, importación y exportación en SQL Server

September 19, 2019 by

El proceso para poder importar o exportar grandes cantidades de datos a una base de datos de SQL Server se conoce como importación y exportación masiva, respectivamente. Afortunadamente, contamos con una gran variedad de herramientas nativas para administrar estas tareas, incluyendo

  • Utilidad bcp
  • Función Openrowset (Bulk)
  • Asistente de importación y exportación de SQL Server
  • Declaración de inserción masiva
  • Seleccionar en la declaración

En este artículo, vamos a revisar varios métodos para realizar operaciones de movimiento de datos en masa de una base de datos a otra.

Asistente para la importación y exportación de SQL Server

El asistente de importación y exportación de SQL Server nos proporciona una interfaz gráfica de usuario en un paquete de servicios de integración de SQL Server (SSIS). Una vez ya creado, el paquete puede automatizarse para poder ejecutarse en un horario determinado. Se puede configurar y modificar aún más mediante el uso de herramientas de datos de SQL Server (SSDT)

Para poder comenzar, tiene que abrir el asistente Importar y exportar, tiene que hacer clic con el botón derecho en una base de datos y seleccione el submenú Tareas -> Exportar comando de datos:

  1. Conéctese a una base de datos de origen a través del paso Elegir un origen de datos

    Los permisos: necesitará los siguientes permisos para la fuente/instancia de datos de origen

    1. Leer datos de la base de datos o archivo
    2. Inserteel permiso en la base de datos msdb para poder guardar el paquete SSIS

  2. Conéctese a una base de datos SQL Server de destino en el paso Elegir un destino.

    Los permisos: se requieren los siguientes permisos para la instancia de destino:

    1. Escribir datos en la base de datos o archivo
    2. Permisos para crear una base de datos
    3. Si es necesario, permiso para crear una tabla

  3. Elija la opción de Copiar datos de una o más tablas o vistas, en el paso de Especificar copia de la tabla o consulta:

  4. En el paso de Seleccionar tablas y vistas de origen, , tiene que elegir las tablas para las cuales desea exportar datos:

  5. En el paso de Guardar y ejecutar paquete, elija la opción de Ejecutar inmediatamente:

  6. En el paso Completar el asistente, haga clic en el botón Finalizar

  7. Una vez completado, se le mostrará el siguiente cuadro de diálogo:

Solución de problemas: el asistente de importación y exportación de SQL Server  no podrá distinguir las columnas de identidad de ningún otro tipo de columna. Esto nos conducirá a errores al insertar datos en tales columnas.

Solución de problemas: el asistente de importación y exportación de SQL Server tampoco llega a procesar las tablas según el orden de dependencia. Un ejemplo podría ser cargar una tabla, con una clave foránea (el elemento secundario), antes de la tabla de referencia del elemento primario, lo que provocaría un error de restricción de clave foránea.

Copia masiva

utilidad bcp

La utilidad BCP es una aplicación de consola, que es administrada a través de la línea de comandos, que genera datos de importación/exportación desde una base de datos a un archivo y viceversa.

Por ejemplo, para tratar de exportar todos los TeamMemberIDscorreos electrónicos al archivo TeamMembers.txt de la tabla TeamMemberEmail en la base de datos de QA, ejecute el siguiente comando bcp:

bcp QA.dbo.TeamMemberEmail out TeamMembers.txt –c -T 

El modificador -c nos especifica que la utilidad se está utilizando con datos de caracteres y que el modificador -T indica que este proceso utilizará una conexión confiable, las credenciales de inicio de sesión de Windows del usuario que está actualmente registrado. Si no se especifica la opción-T se debe tener que especificar un nombre de usuario y una contraseña con las opciones-U y –P .

Como era de suponerse, la tabla de destino debe existir previamente antes de realizar la importación y la tabla debe tener el número esperado y los tipos de columnas de datos para que puedan coincidir con los datos importados.

Para insertar datos del archivo TeamMembers.txt  en la tabla NewSchema.dbo.TeamMemberEmail use el siguiente comando bcp:

bcp NewSchema.dbo.TeamMemberEmail in TeamMembers.txt -T –c

Permisos: se requieren permisos de Selección en la tabla de origen

Declaración de inserción masiva

Otra opción para poder importar/exportar datos entre archivos y tablas es la instrucción de inserción masiva. Las mismas restricciones y requisitos que se aplican a BCP se aplican también a la inserción masiva, incluido el requisito de que exista una tabla que coincida con los datos importados

Primero debemos especificar la ubicación del archivo desde el que se realiza la importación de los datos. la base de datos y tabla de destino:

Función Openrowset (Bulk)

Openrowset(Bulk) es una función de T-SQL que se conecta a través de una fuente de datos OLE DB para poder leer datos. Esto puede acceder a fuentes de datos que son remotas desde una conexión remota frente a un servidor vinculado

La función Openrowset(Bulk) nos ofrece una alternativa para poder acceder a los objetos desde un servidor vinculado y es adecuada para la entrada de datos de una fuente remota.

SELECT INTO

La cláusula Into utilizada, en una combinación con la instrucción Selectnos permite crear una nueva tabla basada en el conjunto de resultados de la instrucciónSelect. Como por ejemplo, para copiar la tabla TeamMemberEmail en la misma instancia, en el esquema predeterminado de la base de datos de control de calidad tiene que ejecutar la siguiente consulta:

Select into no puede ser utilizada para tratar de crear una nueva tabla en una instancia remota de SQL Server, pero se puede incluir en una fuente remota en la instrucción  Select si existe un enlace a la instancia remota.

Las restricciones, los índices y desencadenadores no se transferirán a la nueva tabla. Las columnas de la tabla recién creada no lograrán heredar la propiedad Identity de la salida de la consulta si la instrucciónSelect contiene una función agregada, una cláusula Join o una cláusula Group by y si una columna de identidad se usa en una expresión, se usa más de una vez, o es de una fuente de datos remota.

Exportar e importar datos utilizando ApexSQL Script

Utilizando ApexSQL Script,una herramienta de migración y scripts de datos y esquemas de SQL Server, se puede crear un script SQL para exportar datos, o tanto datos como esquemas, desde una instancia de origen y ejecutarlos en una instancia de destino para realizar la importación.

Para poder realizar un script de los datos de la base de datos de SQL Server con el ApexSQL Script, siga los siguientes pasos:

  1. Ejecute el ApexSQL Script
  2. En la ventana Nuevo proyecto , tiene que especificar el servidor, la fuente de datos y las credenciales para conectarse a una fuente de datos:

  3. ApexSQL Script puede hacer scripts de objetos, datos o ambos. Si tanto los datos como los objetos tienen secuencias de comandos, en la pestaña Opciones debajo de la sección Estructura suponiendo que exista una base de datos de destino, tiene que desmarcar la opciónCrear base de datos y la opción Usar script para base de datos.

    Si existen tablas que contienen restricciones, índices o claves foráneas, tiene que marcar la opción Nombres para escribir los nombres de esos objetos:

  4. ApexSQL Script puede manejar los campos de identidad. En la sección Datos en la pestaña Opciones, marque la opción de Establecer inserción de identidad en. En la sección Fila de guiones como, , seleccione la opción de Insertar:

  5. Si una base de datos de destino tiene un esquema distinto al de la base de datos de origen, en la pestaña Opciones en la sección de Propietarios en el script, seleccione la opción Excluir propietarios  para poder excluir esquemas de los nombres de los objetos:

  6. Una vez que se haya configurado su perfil de exportación a su satisfacción, tiene que hacer clic en el botón Cargar en la esquina inferior derecha de la ventana Nuevo proyecto
  7. En la cuadrícula Resultadosse puede visualizar los datos que se van a incluir en la secuencia de comandos, a nivel agregado. En la pestaña de Inicio, muestre la vista de cuadrícula de datos. Se puede especificar tablas e incluso columnas individuales

  8. Al hacer clic en el botón de Estructura de la pestaña Inicio cambie a la vista de cuadrícula Estructura y seleccione las tablas específicas (y o vistas) para el script:

  9. Ahora que el perfil de secuencias de comandos ya está completo, haga clic en el botón Scriptde la pestaña Inicio para poder iniciar el asistente de Script:

  10. Se mostrará el asistente de script. En el primer paso del asistente de Scriptvaya a seleccionar la Estructura y el modo de script de datos y haga clic en Siguiente:

  11. En el paso Tipo de salida, tiene que seleccionar el tipo de salida SQL y haga clic en Siguiente:

  12. Cualquier objeto que sea dependiente se mostrará y verificará de forma predeterminada en el paso Dependencias
  13. En el paso final, el paso de opciones de Script SQL, seleccione la opción de Guardar el script en archivo y tiene que hacer clic en Crear:

  14. Abra el script recién creado usando SQL Server Management Studio y vaya a ejecutarlo en la base de datos que elija

Copie datos utilizando ApexSQL Data Diff

ApexSQL Data Diff es otra herramienta muy útil para poder mover datos. Está diseñado principalmente como herramienta de comparación y sincronización, y como tal, supone que dos tablas, de estructura similar, existirán en ambas bases de datos.

Si ya existe una tabla de destino y tiene la misma estructura que la tabla de origen, puede también usar ApexSQL Data Diff para migrar, importar y exportar datos. ApexSQL Data Diff es una herramienta de comparación de datos SQL que puede comparar y sincronizar tablas de bases de datos pero también copiar datos de una tabla o tablas a una tabla o tablas de base de datos de destino, como demostraremos ahora.

Para mover datos con ApexSQL Data Diff, siga los siguientes pasos:

  1. Ejecute ApexSQL Data Diff
  2. En la ventana Nuevo proyecto haga clic en el botón Nuevo

  3. En la pestaña Orígenes de datos de la ventana de Nuevo proyecto , conéctese con las bases de datos de origen y destino y haga clic en el botónComparar:

  4. En la cuadrícula Resultados, tiene que seleccionar tablas específicas, incluso filas específicas para copiar:

  5. Haga clic en el botón Sincronizar para poder iniciar el asistente de sincronización:

  6. Siga el asistente de sincronización y en el siguiente paso de Opciones de salidaseleccione la acción Crear una secuencia de comandos de sincronización  junto con la opción de Guardar secuencia de comandos  en archivo:

  7. En el último paso del asistente de sincronización ábralo en SQL Server Management Studio y ejecute la secuencia de comandos. Todos sus datos se habrán movido con éxito:

  8. Haga clic en el botón Crear secuencia de comandosábralo en SQL Server Management Studio y ejecute la secuencia de comandos. Todos sus datos se habrán movido con éxito:

719 Views