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
Primero vamos al SQL Server Management Studio

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

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.

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

Con esto acabamos muchachos, espero que les sirva… saludos









RSS 









Para empezar con SQL Server 2008, muy ilustrativo el ejemplo y muy accesible el tutorial.
Saludos
Qué pasa cuando quiero insertar valores con Ñs, o acentos… cómo puedo definir el lenguage a utilizar por el bulk
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
Gracias por tu ayuda, estaba atorado en como subir un archivo.
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?
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
http://technet.microsoft.com/es-es/library/ms188365.aspx
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
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
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
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
Jejeje, gracias por el tip.
Te felicito de nuevo por tu blog.
Continúa subiendo mas consejos.
Saludos
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
Olvide mencionar que mi Collation es Modern_Spanish_CI_AS y la BD que uso es version 2005
de antemano muchas gracias
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
graciazz!!!!
ME SALVASTE LA VIDA! GRACIAS!
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.
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…
No en realidad son para datos y archivos planos …saludos
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!!
ESTA BUENO … EXCLELENT
Como le hago si el archivo es de excel?
Utiliza el Wizard del SQL Server es muy facil!
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
Gracias me sera muy util en mi hora de examen, terminare primero que los demas
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?
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?
Muchas gracias desde Chile.
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.