Como realizar carga masiva de archivos con Sql Server 2008 R2 (Bulk Insert)

A continuación describiremos como realizar una carga masiva directamente desde sql server a través de un procedimiento almacenado (SP). Para este procedimiento utilizaremos una función de sql server llamada Bulk Insert cuya sintaxis es la siguiente:

Pero para efectos prácticos solo utilizaremos la siguiente estructura:

Para este proceso debemos tener un archivo de formato, nuestro archivo de carga y obviamente nuestra tabla de destino. Para este ejemplo utilizaremos los siguiente:

Tabla cliente

Archivo Formato (cliente.ftm)

Los nombres y largos de los campos deben coincidir con los de la base de datos.
Si lo dejamos así separara el archivo por cantidad de caracteres si lo quieren por delimitadores se deben agregar en ” ” (ejemplo “;”).
La ultima fila debe llevar siempre “\r\n”
10.0 Corresponde a la versión utilizada por sql server
3 Corresponde a la cantidad de filas

Archivo de Carga (cliente_masivo.txt)

Bueno con estos datos estamos listos para realizar nuestra carga de datos masivos. Para no alargar mas este tutorial les dejo el procedimiento almacenado y la forma de uso:

Al comienzo limpia la tabla (en caso que no necesiten limpiar solo borran esa parte).
Controla algunos errores que puedan ocurrir retornando -1.

Modo de uso:

Si están trabajando apuntando a algún servidor por ejemplo QUALITY deben cambiar la ruta C:\ por la correspondiente \\QUALITY\…

Espero sea de su utilidad.

No duden en dejar sus inquietudes o comentarios.

Saludos.

Publicado en Sql Server
8 Comentarios en “Como realizar carga masiva de archivos con Sql Server 2008 R2 (Bulk Insert)
  1. SIO dice:

    necesito de vuestra ayuda con una carga masiva de datos que necesito implementar,

    Necesito cargar un archivo plano con campos de longitud fija a una base de datos Microsoft sql server 2008, el tema que lo estoy realizando a través de la instrucción Bulk Insert

    la instrucción es la siguiente:

    BULK INSERT TmpBulkTL5

    FROM ‘C:\FilesProvider\TL\TLC150324.txt’

    WITH (ROWTERMINATOR = ‘\n’,FIRSTROW = 2)

    Por el momento ambos archivos como el sql server se encuentran en el mismo equipo.

    El Archivo contiene lo siguiente:

    HDRTL20150324

    TLC001000077334224201503240000030001000001000010000000001MXP00000020003221588249064741

    TLC001000077334225201503240000050001000001000010000000001MXP00000050004521355282272910

    TLC001000077334226201503232359230001000001000010000000001MXP00000050003141249523162552

    TLC001000077334227201503232359270001000001000010000000001MXP00000020003121195325847942

    TLC001000077334230201503232359290001000001000010000000001MXP00000030003143387512981367

    Cuando ejecuto el bulk muestra el siguiente error:

    Msg 4866, Level 16, State 8, Line 1

    Error de carga masiva. Columna demasiado larga en el archivo de datos para la fila 1, columna 1. Compruebe que especificó correctamente los valores para el terminador de campo y el terminador de fila.

    Msg 7301, Level 16, State 2, Line 1

    No se puede obtener (“IID_IColumnsInfo”) del proveedor OLE DB “BULK” para el servidor vinculado “(null)”.

  2. Estimado según entiendo el bulk insert requiere un delimitador ya sea por , ; : tabuladores, etc. Te recomiendo utilizar la rutina que explico en este tutorial en donde defines un archivo de formato con la cantidad de caracteres que requiere cada campo.

    Quedo atento a tus comentarios

  3. vianey dice:

    Que mas como estas buenas tardes muy agradecido con tu ejemplo genial
    de hecho me encuentro tratando de subir un archivo de excel a una tabla sql server que ya tengo y no me deja porfavor necesito ayuda quedo atento si en realidad me puedes ayudar te agradezco mucho yo le pago a cualquier nro de cuenta que me des por tu apoyo muchas gracias quedo atento.

    http://www.qualityinfosolutions.com/como-realizar-carga-masiva-de-archivos-con-sql-server-2008-r2-bulk-insert/

  4. Fer dice:

    Una pregunta,

    Cómo creo el fmt?, o con qué aplicación… no logro generarlo

    Salduos!!!

  5. Alex G dice:

    Gracias por la solución…
    Ya aplique las instrucciones pero mi archivo fuente (txt) tiene identificadores de texto “” los cuales tambien los sube a la tabla, es decir, en la tabla tengo el caracter ” en cada registro subido.
    Por favor como puedo subir los registros sin este calificador de texto “”.

    Gracias de antemano

    Alex G

  6. John Camargo dice:

    Buenas tardes,

    Ese BCP funciona excelente.

    Pero tengo una pregunta para que por favor me ayudes.

    Yo quiero traer muchos archivos de un directorio y los archivos son .txt, que tienen la misma estructura, pero los nombres de los archivos son diferentes. Como haria con esa instrucción para que cargue a la tabla de sql todos los archivos sin importar su nombre?. o como haria para traer solo los archivos que su nombre de archivo comienze por determinada letra?.

    Tal y como esta tu BCP funciona pero para un archivo .. que tiene un nombre especifico.

    Quedo muy atento a su grandiosa ayuda.

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*