none
Cargue masivo por bloques RRS feed

  • Pregunta

  • Hola a todos.

    Estoy realizando el cargue de un archivo.csv a una tabla temporal mediante BULK INSERT, el archivo contiene aproximadamente 700000 registros, pero cuando se está ejecutando el procedimiento al llegar aproximadamente a  41000 registros se presenta error con 12 registros, el error es el siguiente:

    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41473, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41474, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41475, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41476, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41477, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41478, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41479, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41482, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41483, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41484, columna 12 (I_RECERTIFICACION).
    Mens. 4863, Nivel 16, Estado 1, Línea 1
    Error de conversión de datos de carga masiva (truncado) en la fila 41485, columna 12 (I_RECERTIFICACION).
    Mens. 4865, Nivel 16, Estado 1, Línea 1
    No se puede realizar la carga masiva porque se superó el número máximo de errores (10).
    Mens. 7399, Nivel 16, Estado 1, Línea 1
    El proveedor OLE DB "BULK" del servidor vinculado "(null)" informó de un error. El proveedor no proporcionó información acerca del error.
    Mens. 7330, Nivel 16, Estado 2, Línea 1
    No se puede capturar una fila del proveedor OLE DB "BULK" para el servidor vinculado "(null)".

    Ya revisé en un post de este foro el error presentado y con un archivo con menos registros no se me presenta el error y se insertan los datos sin problema.

    Los registros que me presentan el error, los pego en otro archivo.csv y ejecuto el proceso y los registros se cargan sin ningún problema.

    ¿Este problema que se presenta es por que el archivo es muy grande y cuando llega a cierto numero de registros presenta el error?

    ¿Será que hay alguna forma o sentencia en SQL que me permita cargar el archivo en bloque, es decir que pueda cargarlo de a 15000 registros?

    Agradezco mucho su colaboración y ayuda

    miércoles, 7 de diciembre de 2016 21:59

Respuestas

  • Examina la línea ANTERIOR a la primera que falla, y comprueba si no hay algo en el fichero CSV que impida que se detecte correctamente el final de la línea. Por ejemplo, un carácter de escape sin escapar, o un único salto de línea cuando el formato especificaba retorno de carro más salto de línea, o alguna otra cosa por el estilo.
    miércoles, 7 de diciembre de 2016 22:29

Todas las respuestas

  • Saludos

    Aqui toco el tema a mas detalle pero por default el bcp carga por lotes de 1000, podrias cambiar la sentencia para que carge por menores.

    http://sqlservertoolbox.blogspot.com/2016/03/inserciones-por-lotes-batch.html

    miércoles, 7 de diciembre de 2016 22:04
  • Hola.

    Revisé el post que indicaste y y puse el comando:

    exec(' BULK INSERT #ImportSUIC 
    FROM ''' + @path +''' 
    WITH 
           ( 
    BATCHSIZE = 5000,
                    ROWTERMINATOR =''\n'', 
                    FIELDTERMINATOR = '','' ,
    FIRSTROW = 2
            ) 
    ')  

    Ejecuté el proceso y aun asi me sigue presentando el error, lo curioso es que cree un archivo que contiene los una gran canitdad de datos (41474) y los ultimos registros de este, son los que me arroja el el error.

    Ejecuto el proceso y corre bien...

    Entonces no se que puede estar pasando.


    Yamid Pertuz

    miércoles, 7 de diciembre de 2016 22:25
  • Saludos

    Algun dato sucio, intenta eliminar unos 100 registros apartir de donde te da el error e intenta si pasa es que es algo, en ocasiones es basura de codigo que no se ve al ojo humano. 

    miércoles, 7 de diciembre de 2016 22:27
  • Examina la línea ANTERIOR a la primera que falla, y comprueba si no hay algo en el fichero CSV que impida que se detecte correctamente el final de la línea. Por ejemplo, un carácter de escape sin escapar, o un único salto de línea cuando el formato especificaba retorno de carro más salto de línea, o alguna otra cosa por el estilo.
    miércoles, 7 de diciembre de 2016 22:29
  • Saludos

    Gracias por la corrección Alberto como bien dices debe ser en la linea anterior.

    jueves, 8 de diciembre de 2016 4:07
  • Hola a todos.

    Muchas gracias por la respuestas, el archivo que se está cargando al parecer viene con datos - basura.


    Yamid Pertuz

    martes, 13 de diciembre de 2016 19:23