Cargar archivo *.txt o *csv a una tabla en SQL Server 2008

27 05 2009

Hola muchachos y empezando con mis pequeñas ayudas técnicas les preparé un pequeño material para que puedas cargar un archivo de texto en formato *.txt o *.csv a una tabla en SQL Server 2008, bueno comencemos :D

Primero vamos al SQL Server Management Studio

Management Studio1

Vamos a crear una base de datos simple y una tabla nueva para realizar nuestro ejemplo, entonces hacemos esto:

Primero crear una base de datos en este caso DB_APRENDIZAJE

Base datos

Ya con nuestra base de datos creada ahora necesitamos abrir una nueva consulta, solo debemos hacer click arriba en el botón “New Query”

Ahora para crear una tabla ejecutamos (Sombreando + Botón execute) el siguiente código:

USE DB_APRENDIZAJE
--Para utilizar la Base de datos

CREATE TABLE TIENDA (IdTienda varchar(50), Nombre varchar(50),
Ciudad varchar (25), Factura decimal(7,3))
--Para Crear la Tabla

Con nuestra tabla ya creada podemos verla con la siguiente consulta:

SELECT * FROM TIENDA
--Muestra la tabla

Como puedes ver ya esta lista nuestra tabla y aunque vacía ya sabemos que tipos de datos se van a poder insertar, esto es importante porque al cargar los datos de origen desde nuestro archivo de texto o csv estos tienen que coincidir con los de destino, ahora creamos nuestro archivo de texto con los datos que vamos a ingresar.

Texto

Ya tenemos nuestro archivo y para este ejemplo lo he guardado en mi partición D:\ en una carpeta BASES DE DATOS asi que podré acceder a este fácilmente, para cargar el archivo a nuestra tabla ejecutamos el siguiente código en nuestra hojita de consultas:

BULK

INSERT TIENDA
FROM 'D:\BASES DE DATOS\DATOS.txt'--Ruta del archivo
WITH

( FIELDTERMINATOR = ',', --separa campos
  ROWTERMINATOR = '\n' ) --separa filas

GO

Ejecutamos la consulta y vemos que los cambios se han realizado, podemos comprobar si los datos están cargados mediante un nuevo SELECT

SELECT * FROM TIENDA
--Muestra la tabla

Consultas004

Con esto acabamos muchachos, espero que les sirva… saludos :D


Acciones

Información

29 respuestas

29 05 2009
Irineo Chavarria

Para empezar con SQL Server 2008, muy ilustrativo el ejemplo y muy accesible el tutorial.

Saludos

30 07 2009
Gladys Villablanca

Qué pasa cuando quiero insertar valores con Ñs, o acentos… cómo puedo definir el lenguage a utilizar por el bulk

5 08 2009
huamanpunlay

Esto en si es la forma de subir archivos planos para cargar la tabla, las definiciones de Ñs y acentos dependen del tipo de datos para eso revisa informacion sobre texto Unicode y no Unicode

4 08 2009
guss_69

Gracias por tu ayuda, estaba atorado en como subir un archivo.

2 09 2009
juan

que pasa cuando el archivo plano es de longitud fija? es decir no tiene caracter especial que delimite las columnas,,… hay alguna manera de hacerlo?

3 09 2009
huamanpunlay

Bueno si te refieres a que no tiene un caracter especial como por ejemplo una coma, quizas puede ser solo un espacio vacío y en el fieldterminator simplemente iria un espacio en blanco (” “) así donde se vea el espacio se reconocerá como separador, realiza tus pruebas y si deseas mas documentacion aquí en technet o msdn encuentras la sintaxis completa …saludos :D
http://technet.microsoft.com/es-es/library/ms188365.aspx

15 10 2009
Ignacio Navarro

Hola huamanpunlay,

Muy buen tutorial, te felicito.

Tengo la misma duda que Juan, ¿como le haces cuando no hay ningún delimitador, ni siquiera espacio, sino que son longitudes constantes, pero incluso en un mismo archivo de texto plano hay distintas separaciones, por ejemplo, los renglones 1 a 5 se separarán de cierta forma y los renglones 6 a 10 de otra forma?.

Gracias por el apoyo

Saludos

17 10 2009
huamanpunlay

Hola cuando no hay delimitador puedes incluir ahi también un espacio en blanco o como sea que este separado el campo y bueno en lo demás ya eso viene por cuenta de la limpieza de tu data y los formatos que puedes obtenerlas, tambien podrías hacer uso del asistente del SQL Server o sino generar un proyecto de Integration y hacerlo a nivel de ETL pero esto ya es otro tema, como se dice tenemos que ingeniarnosla porque un método así específico no te podría dar la verdad…saludos :D

21 10 2009
Ignacio Navarro

Huamanpunlay, muchas gracias por el consejo,

Fijate que estaba pensando en usar el SSIS, pero esta herramienta solo viene en las versiones SQLServer de paga, la versión Express no la tiene. Y creo que el cliente al que le estamos haciendo el desarrollo no tiene SQL de paga, sabes si el proyecto creado en SSIS correría en un servidor con SQL 2008 Express o en su defecto en SQL de paga pero versión 2000?

Te envío un saludo y gracias de nuevo

22 10 2009
huamanpunlay

Mmm si el problema que tenemos los desarrolladores de BI jeje…bueno si el cliente no tiene una version de Paga tu podrías usar la versión que tengas instalada en este caso yo para estudio uso la versión Developer de SQL Server 2008 bajo licencia de Microsoft Dreamspark (licencia para estudiantes) es una version completa pero no es para uso comercial, quizas puedas hacer tu ETL en esta y luego copiar tu data o la tablita ya lista a tu servidor de trabajo creo que eso no es ilegal jeje almenos eso espero…saludos :D

27 10 2009
Ignacio Navarro

Jejeje, gracias por el tip.

Te felicito de nuevo por tu blog.
Continúa subiendo mas consejos.

Saludos

30 10 2009
Maik

Hola, muy buen tutorial

Me he topado con un problema

Cuando importo datos con acento me los cambia por otros caracteres, pasa lo mism con la ñ

Alguno sabe como solucionarlo si es que ya se toparon con esto

Muchas gracias a todos

30 10 2009
Maik

Olvide mencionar que mi Collation es Modern_Spanish_CI_AS y la BD que uso es version 2005

de antemano muchas gracias

31 10 2009
huamanpunlay

Bueno depende del archivo que guardes…suponiendo que es un *.txt:
- Al momento de guardar el documento debajo del nombre del archivo y del tipo está la línea “Codificación” que como verás por defecto esta en ANSI, cambiale el valor a “Unicode”
- Ejecuta tu mismo código BULK y así los acentos y las Ñs se verán bien´
Listo!
*A propósito, te saldrá una advertencia bueno esto se soluciona configurando el DATAFILETYPE =’widechar’ de esta manera:

select * from dbo.Empleado

Bulk insert dbo.empleado
from ‘D:\Datos.txt’

With

(
FieldTerminator = ‘,’,
rowterminator =’\n’,
DataFileType =’widechar’ )

Saludos :D

5 12 2009
NOHANY

graciazz!!!!

15 12 2009
Christian

ME SALVASTE LA VIDA! GRACIAS!

27 01 2010
Ignacio Navarro

Hola huamanpunlay,

Nuevamente busco tu consejo.

Tengo que cargar una archivo de Excel 2003 (.xls) a la BD, sabes como hacelo utilizando BULK INSERT?. El problema es que no me permiten que se convierta primero a CSV porque si ese fuera el caso, aplico exactamente tu Tutorial.

Ojalá me puedas ayudar.

30 01 2010
Veronica

Hola…de casualidad el procedimiento que haces es el mismo para subir un archivo con formato de word o jpg.
Es que tengo que subir o cargar un archivo en un campo que tengo en mi base de datos en sqlserver2000…

31 01 2010
huamanpunlay

No en realidad son para datos y archivos planos …saludos

26 04 2010
Damián

Hola!! muy buena ayuda.
Pero , que pasa si en el archivo tengo filas duplicadas..como hago para que bulk insert me genere un archivo con estas iconsistencias, pero igual me inserte aquellas filas que estan bien. Muchas Gracias!!

3 06 2010
Elias

ESTA BUENO … EXCLELENT

9 06 2010
Irving

Como le hago si el archivo es de excel?

16 06 2010
huamanpunlay

Utiliza el Wizard del SQL Server es muy facil!

22 10 2010
fer

Probaron con utilizar el agente de exportacion – importacion de sql 2008 es muy completo y simple, pero no sirve si la tabla destino tiene datos. Saludos

10 12 2010
GrM@n

Gracias me sera muy util en mi hora de examen, terminare primero que los demas :)

25 10 2011
Harry Son

Muy bueno el artículo. Me gustaría que esto se hiciera automáticamente cada vez que ingreso un nuevo fichero en la carpeta de origen, o bien cada cierto tiempo para los que que hayan llegado nuevos. ¿Alguien sabría decirme como hacerlo?

13 02 2012
Karolain

hola me encanto tu articulo, y me funciona para algunas tablas pero cuando tengo que meter fechas … llega el problema . Con el insert sencillo la fecha la coloco INSERT INTO US VALUES (‘david’ , ’28-12-2011′ ) y me inserta super. Pero cuando ejecuto tus sentencias me sale un error en la fecha… existe alguna manera de manejar esto?

14 02 2012
esteban

Muchas gracias desde Chile.

15 02 2012
Benito

Hola, muy bueno tu articulo, lo he utilizado mucho.
Actualmente se me presentó un problema, fijate que tengo como delimitador de fila 5 espacio en blanco, sin embargo tengo una columna que en ciertas ocaciones tiene 5 caracteres y en otras ocasiones es de 6.
Cuando es de 5 no hay problemas porque el delimitador de fila es de 5 espacios en blanco, pero cuando es de 6 caracteres el delimitador pasa a ser de 4 caracteres en blaco.
Como puedo hacer para resolver este inconveniente???
Cabe recalcar que no puedo usar el wizard por que esto está automatizado y se realiza por query a través de un botón en una interfaz gráfica.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.