post icon

Importar datos de un fichero CSV en SQL Server

Muchas veces en la práctica vamos a encontrarnos con la siguiente situación, nos envían de algún lugar datos en un fichero CSV (Fichero que tiene valores separados por comas), y necesitemos almacenar estos en nuestra base de datos, los motivos pueden ser varios, importación de datos de alguna base datos que no solamente puede ser SQL Server mismo, algún programa externo a nosotros genera este tipo de ficheros, por cuestión de interoperabilidad con otras empresas se decide utilizar este mecanismo, en fin, cualquier motivo resulta válido para el caso.

El punto más bien es utilizar un mecanismo más rápido de inserción de los mismos a nuestra BD, que tener que programar una aplicación que haga este trabajo. SQL Server tiene su propia herramienta que hace esto por nosotros, se lo puede hacer de manera gráfica como por línea de comandos. Evidentemente no veremos el modo gráfico porque es demasiado intuitivo que no requiere explicación, pero si sería interesante conocer como esa pantalla gráfica hace “por debajo” este trabajo, que nosotros mismo podemos hacerlo.

El comando BULK nos ayudara, veamos un ejemplo práctico. Creemos la siguiente tabla:

1
2
3
4
5
6
7
8
9
USE BD
CREATE TABLE CSVPersona
(
IdPersona INT,
Nombre VARCHAR(40),
Apellidos VARCHAR(40),
Nacimiento DATETIME
);
GO

Luego necesitamos crear nuestro fichero Personas.CSV con los siguientes datos:

1,OMAR,ACUÑA,1980/12/14
2,MARIA,VILLALBA,1986/03/02
3,LUIS,FERREIRA,2010/05/02
4,ABRAHAM,RODRIGUEZ,1964/05/12

Y es aqui donde entra en acción SQL Server insertando los datos del siguiente modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- Seteamos el formato de fecha para que funcione correctamente este fichero
SET DATEFORMAT YMD;
GO
 
-- Procedemos a la importacion
BULK
INSERT CSVPersona
FROM 'D:\PERSONAS.CSV'
WITH
(
-- seteamos el separador de campos
FIELDTERMINATOR = ',',
--seteamos el separador de registro
ROWTERMINATOR = '\n'
);
GO
 
-- Verificamos los datos
select * from csvpersona

Comentarios desde Facebook:

  1. avatar
    MARKOS Mozilla Firefox Windows
    21 Enero 2013 at 16:47 #

    EXCELENTE…

  2. avatar
    amilcar MEXICO Mozilla Firefox Windows
    4 Septiembre 2012 at 18:42 #

    muchas gracias mi estimado siempre dando buenas soluciones, ya entendi… en ese caso creo que utilizare ‘|’ el tal famoso pipe o no se como lo llamen jeje.. gracias por tu aportacion pude investigar otros datos para poder diferenciarlos… saludos

  3. avatar
    Gerardo MEXICO Safari Windows
    7 Diciembre 2011 at 01:34 #

    Que tal.

    Estoy haciendo un sistema con MySQL y Java y necesito importar los datos de 3200 registros a través de un archivo de comas. Este código lo podría utilizar en un pequeño frame de Java verdad?

    Saludos!

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      7 Diciembre 2011 at 08:13 #

      Hola Gerardo,

      Éste código sólo sirve para usarlo en MS SQL, lo que si te va servir es ésto:

      http://www.devtroce.com/2011/03/28/insertar-datos-desde-un-csv-a-mysql-con-java/

      • avatar
        amilcar MEXICO Mozilla Firefox Windows
        4 Septiembre 2012 at 14:59 #

        y si el campo que quiero insertar es un campo combinado que incluye sus propias comas como seria??
        te pondre un ejemplo para que me expliques…..
        tengo un campo que se llama poblacion, pero existe la posibilidad que lo inserten de esta manera

        poblacio direccion
        ——————— ————-
        municipio,estado,pais null

        ¿como puede el sql identificar que la coma que esta en el campo combinado no le asignara a otro campo?

        • avatar
          GeekZero Google Chrome Windows
          4 Septiembre 2012 at 17:51 #

          Hola Amilcar, No puede diferenciar si usas el mismo simbolo.
          Podrias optar usar otro FIELDTERMINATOR, o tambien mantener con coma y considerar un campo independiente, volcandolo en una tabla temporal asi como está ahora, y luego aplicas una transformación como deseas..

Trackbacks/Pingbacks

  1. Importar archivos CSV con C# y SqlBulkCopy | DevTroce.com UNITED STATES WordPress - 24 Mayo 2013

    […] meses atrás vimos como Importar datos de un fichero CSV en SQL Server y ahora lo veremos como hacerlo desde una aplicación cliente. Principalmente nos servirá si […]

  2. Exportar Datos desde SQL Server a CSV | DevTroce.com UNITED STATES WordPress - 24 Octubre 2011

    […] MS SQL Server no tiene un comando nativo TSQL que sirva para exportar directamente datos como el BULK para importarlos, aunque eso no significa que no tenga una herramienta que sirva para tal […]

  3. Leer ficheros .CSV con Java | DevTroce.com WordPress - 4 Agosto 2010

    […] en devtroce, ya hemos visto como trabajar con éste tipo de archivos en otros artículos: SQL Server, MySQL, Delphi. Ya que Java nos ofrece la ventaja de la multiplataformidad, para ello necesitaremos […]

Responder