Ficheros CSV y SQL Server

No conozco ningún profesional IT programador o administrador de bases de datos, que no haya tenido que lidiar alguna que otra vez (a veces casi a diario) con ficheros planos con datos separados por comas, con ficheros CSV. Si bien hoy día la integración con Excel y a su vez con SQL Server es total, no está de más a veces tener algún script local que nos facilite enormemente la fase de importación/exportación a/desde nuestra base de datos SQL respecto a un fichero CSV. Vamos a ver con un ejemplo lo extraordinariamente sencillo que es.
Supongamos que tenemos un fichero CSV con información sobre 4 campos: DNI, Nombre, Apellidos y Edad, tal como éste:

Con este script abriríamos dicho fichero, lo leeríamos e insertaríamos los datos en las columnas correspondientes en la nueva tabla simultáneamente creada en el script, FicheroCSV. Es importante al crear la tabla que el número de campos y formato de éstos sean exactamente igual a los existentes en el CSV. Vemos que simplemente entonces debemos usar BULK a la hora de insertar, e indicar los delimitadores de campos (coma en este caso) y fila (salto de línea).

CREATE TABLE FicheroCSV (
DNI VARCHAR(15),
Nombre VARCHAR(50),
Apellidos VARCHAR(50),
Edad INT)

BULK INSERT FicheroCSV FROM 'C:\FICHERO.TXT'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')
SELECT * FROM FicheroCSV

Por último vamos a hacer un pequeño ejercicio inverso, es decir, queremos crear un nuevo fichero CSV con el contenido del anterior pero alterado sólo con algunos cambios. Para crear dicho fichero haremos uso del comando bcp desde una línea de comandos (para más información sobre este comando pulsa aquí).

Supongamos por ejemplo que añadimos una nueva columna a nuestra tabla FicheroCSV y la rellenamos para los registros importados para finalmente crear otro CSV con la información actualizada en la tabla.

ALTER TABLE FicheroCSV ADD Comentarios VARCHAR(100)

UPDATE FicheroCSV SET COMENTARIOS=
CASE WHEN Edad<=20 THEN 'Contrata el Carnet Joven' WHEN Edad<=40 THEN 'Estas en la mejor edad!'
ELSE 'Cuida tu salud!' END


Espero os haya sido de utilidad este post, y como siempre quedo abierto a vuestros comentarios y sugerencias.

2 comentarios :

  1. Muchas gracias por la información,

    Pero tengo una pregunta, ¿cómo puedo acceder desde SQLa la pimera línea del fichero CSV?

    Quiero hacer eso porque en la primera línea tengo los campos con los que tengo que crearme la tabla a la que luego voy a importar los datos del fichero CSV.

    ResponderEliminar
  2. Hola, se me ocurren varias opciones para hacer lo que necesitas, pero me gustaria si es posible que me enviaras algun ejemplo de como en esa primera linea nombras y/o tienes el formato de los campos futuros a crear en la tabla. Me parece muy interesante, asi que espero la informacion para intentar ayudarte. Un saludo.

    ResponderEliminar

Buscar en el Blog: