Exportar datos de una tabla de SQL Server

Para importar y exportar datos de SQL Server Microsoft proporciona la herramienta bpc, que funciona por linea de comandos. Aunque sería de agradecer que SQL Server Management Studio proporcionara alguna utilidad gráfica de importación/exportación que nos evitara tener que recurrir a utilizar la línea de comandos, bpc es muy fácil de utilizar, al menos para hacer cosas sencillas. También es de los métodos más eficientes para exportar o importar datos en SQL Server.

La sintaxis básica de este comando es esta:

bcp {tabla o consulta} {in/out} nombre_del_fichero [opciones]

Las opciones se pueden complicar bastante, e incluso se pueden construir y utilizar ficheros de formato, pero para la mayoría de los casos puede ser suficiente con utilizar las opciones más básicas que nos permitan utilizar un fichero para exportar/importar los datos de una tabla:

  • Exportación de los datos de la tabla 'mitabla' de la BD 'mibasededatos' en el fichero 'datosdemitabla.txt'

    > bcp mibasededatos.miusuario.mitabla out c:\midirectorio\datosdemitabla.txt -c -T

     

  • Importación de los datos del fichero 'datosdemitabla.txt' en la tabla 'miotratabla' de la BD 'miotrabasededatos':

    > bcp miotrabasededatos.miusuario.miotratabla in c:\midirectorio\datosdemitabla.txt -c -T

 

Facilito, no? Pero si, por ejemplo, los datos que exportamos los queremos utilizar para hacer una migración a otro gestor de base de datos diferente de SQL Server, habrá que afinar más en la utilización de opciones para la definición del formato del fichero para que este sea compatible con la utilidad de importación del otro SGBD que vayamos a utilizar, o también nos podemos plantear otras opciones:

  • Crear dentro del fichero las mismas sentencias de inserción, en lugar de sólo los datos.
    Haciendo la exportación a partir de una sentencia SELECT, con la opción queryout, se pueden incluir los INSERTS. Sólo hay que tener en cuenta que la sintaxis sea compatible con la de la base de datos donde quedamos insertar los datos.
    Yo lo he probado con una base de datos MySQL, y de esta forma se genera un fichero que se puede importar directamente con la interface de de importación de phpmyadmin, por ejemplo:

    >bcp "select 'INSERT INTO tipovia (id_tipovia,des_tipovia) VALUES ('+cast(id_tipovia as varchar)+','''+des_tipovia+''');' FROM dataprix.dbo.tipovia" queryout c:\pruebatipovia.dat -T -c

    Con id_tipovia he tenido que hacer un cast para convertir los datos de INT a VARCHAR y que sean compatibles con la cadena del INSERT.
    El resultado es el fichero pruebatipovia.dat que contendrá los siguientes datos:


    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (2,'ACCE');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (3,'ACEQ');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (5,'ALAM');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (6,'CUSTA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (6,'ALDAP');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (10,'ANDAD');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (11,'ANGTA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (12,'APTOS');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (13,'ARB');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (14,'ARRAL');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (15,'ARRY');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (18,'GALE');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (21,'AUTO');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (21,'AVIA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (22,'BARRI');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (23,'BARDA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (24,'AVDA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (26,'BJADA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (27,'BELNA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (29,'GTA');
    INSERT INTO pruebatipovia (id_tipovia,des_tipovia) VALUES (31,'BLQUE');
    ...


    Para importar el fichero desde MySQL sólo habría que abrir en un navegador phpmyadmin y seleccionar el fichero generado con bcp para importarlo, o hacer la importación también desde linea de comandos.

  • Importación de un fichero de datos con INSERTS desde phpmyadmin (MySQL)

     

  • Otra opción sería utilizar una herramienta que pueda conectarse a diferentes gestores de bases de datos, y que tenga capacidades de exportación/importación. Con Oracle SQL Developer, por ejemplo, se puede trabajar desde el mismo entorno con bases de datos Oracle, SQL Server, Access y MySQL.
    Se hace la exportación a un fichero desde la BD origen, y luego se hace la importación del fichero desde la base de datos destino.

    Exportacion de datos SQL Server desde Oracle SQL Developer

 

 

 

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.

Más información sobre opciones de formato

Al hacer este envío, aceptas la política de privacidad de Mollom (servicio antispam).
Si no estás registrado, recuerda que tu comentario no se publicará hasta que no lo hayamos revisado

 

Gestion del Conocimiento    |   Business Intelligence y Analítica   |    Bases de Datos   |     ERP    |     CRM     |   Cloud computing    |   Tendencias IT