txt plano instrucción ejemplos ejecutar desde delimitador cargar archivo sql-server ssis sql-server-2008-r2 flat-file

sql server - instrucción - ¿Cómo evitar que SSIS trunque el último campo de la última fila de datos en un archivo plano?



ejemplos de bcp en sql server (5)

Tengo un paquete SSIS que se descomprime y carga un archivo de texto. Ha funcionado muy bien desde el depurador, y desde los diversos servidores se ha cargado en su camino hacia nuestro entorno de producción.

Mi problema ahora es este: se estaba cargando un archivo, todo iba bien, pero de repente, en la última fila de datos (según el mensaje de error), se truncó el último campo. Supuse que el archivo que recibimos probablemente estaba en mal estado, se rompió y todo está bien allí ...

Es un | archivo delimitado, sin calificador de texto, y {CR}{LF} como el delimitador de fila. Como el campo con el error de truncamiento es el último campo de la fila (y en este caso el último campo del archivo completo), su delimitador es {CR}{LF} en oposición a | .

El archivo parece prístino e incluso lo he cargado en Excel sin problemas y sin quejas. He ejecutado este archivo a través de mi máquina local ejecutando el paquete a través del deugger en VS 2008, y funcionó perfectamente. ¿Alguien ha tenido problemas con este tipo de comportamiento en absoluto? No puedo probarlo mucho en el entorno en el que se estrelló, porque es nuestro entorno de producción y estas son las horas pico ... por lo que cualquier consejo es muy apreciado.

Mensaje de error:

Description: Data conversion failed. The data conversion for column "ACD_Flag" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.". End Error Error: 2013-02-01 01:32:06.32 Code: 0xC020902A Source: Load ACD file into Table HDS Flat File 1 [9] Description: The "output column "ACD_Flag" (1040)" failed because truncation occurred, and the truncation row disposition on "output column "ACD_Flag" (1040)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component. End Error Error: 2013-02-01 01:32:06.32 Code: 0xC0202092 Source: Load ACD file into Table [9] Description: An error occurred while processing file "MY FLAT FILE" on data row 737541.

737541 es la última fila en el archivo.

Actualización: originalmente tenía el delimitador de fila {CR} , pero lo actualicé a {CR}{LF} para intentar solucionar este problema ... aunque fue en vano.


Actualizar:

Puedo recrear el mensaje de error que ha agregado a su pregunta. El error ocurre cuando tiene más delimitadores de columna en la línea de lo que ha definido en el administrador de conexión de archivos planos.

Aquí hay un ejemplo simple para ilustrarlo. Creé un archivo simple como se muestra a continuación.

Creé un paquete y configuré el administrador de conexión de archivos sin formato con la configuración que se muestra a continuación.

Configuré el paquete con una tarea de flujo de datos para leer el archivo y completar los datos en una tabla de base de datos. Cuando ejecuté el paquete, falló.

Hizo clic en la pestaña Execution Results en el BIDS. Muestra el mismo mensaje que ha publicado en su pregunta.

[Flat File Source [44]] Error: Data conversion failed. The data conversion for column "Column 1" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.". [Flat File Source [44]] Error: The "output column "Column 1" (128)" failed because truncation occurred, and the truncation row disposition on "output column "Column 1" (128)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component. [Flat File Source [44]] Error: An error occurred while processing file "C:/temp/FlatFile.txt" on data row 2. [SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Flat File Source" (44) returned error code 0xC0202092. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.

Espero que ayude a identificar tu problema.

Respuesta anterior:

Creo que el valor en el último campo en la última fila de su archivo probablemente excedió el valor de la propiedad OutputColumnWidth de la última columna en Flat File Connection Manager.

Haga clic con el botón derecho en el administrador de conexión de archivos planos en su paquete SSIS. Haga clic en la pestaña Advanced en el Flat File Connection Manager Editor . Haga clic en la última columna y verifique el valor en la propiedad OutputColumnWidth .

Ahora, verifique la longitud de los datos en el último campo de la última fila del archivo que está causando el error de su paquete.

Si esa es la causa del problema, aquí hay dos opciones posibles para arreglar esto:

  1. Aumente la propiedad OutputColumnWidth en la última columna a una longitud adecuada que cumpla con sus requisitos.

  2. Si no le importan las advertencias de truncamiento, puede cambiar el resultado del error de truncamiento en la última columna del Editor de código fuente plano. Haga doble clic en el Flat File Source Editor , haga clic en Error Output . Cambie el valor de la columna Truncamiento a Ignore failure o Redirect row . Prefiero Redirect row porque permite rastrear problemas de datos en el archivo entrante al redirigir el no válido a una tabla separada y tomar las medidas necesarias para corregir los datos.

Espero que te dé una idea para resolver tu problema.


¿Solo sucede en un servidor? ¿Y no estás usando un calificador de prueba? Hemos tenido que pasar esto antes. Esto es lo que lo solucionó.

Vaya a ese servidor y abra el archivo xml. Busca el TextQualifier y mira si dice:

<DTS:Property DTS:Name="TextQualifier" xml:space="preserve">&lt;none&gt;</DTS:Property>

Si no lo hace decir eso.


Así que he encontrado una respuesta. Las otras respuestas están muy bien pensadas y son buenas, pero lo resolví usando una técnica ligeramente diferente.

Casi había eliminado la posibilidad real de truncamiento porque una vez que examiné los datos en el archivo plano, simplemente no tenía sentido ... el truncamiento definitivamente NO podría estar ocurriendo. Así que decidí enfocar la segunda mitad del mensaje de error: or one or more characters had no match in the target code page

Después de un intenso trabajo de búsqueda de Google, encontré algunos sitios como este: http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/6d4eb033-2c45-47e4-9e29-f20214122dd3/

Básicamente, la idea es que si sabes que no se está produciendo el truncamiento, tienes caracteres sin una coincidencia de página de códigos, por lo que un cambio de 1252 ANSI Latin I a 65001 UTF-8 debería marcar la diferencia.

Como esto se ha movido a producción, y el entorno de producción es el único que tiene este problema, quería asegurarme al 100% que tenía la solución correcta, así que hice un cambio más. No tenía ningún calificador de texto, pero SSIS todavía conserva la propiedad Text_Qualified predeterminada para cada columna en el administrador de conexión de archivos planos en TRUE . Puse TODOS ellos en falso (no solo en la columna en cuestión). Entonces, ahora el paquete no ve que necesita un calificador, luego ve al calificador y mira <none> y luego no busca un calificador ... simplemente no usa un período calificador.

Entre estos dos cambios, el paquete finalmente se ejecutó con éxito. Dado que ambos cambios se realizaron en la misma versión, y solo he recibido este error en la producción y no puedo permitir el cambio de diferentes cosas para fines experimentales, no puedo decir cuál cambio finalmente lo hizo, pero Puedo decirte que esos fueron los únicos dos cambios que hice.

Una cosa a tener en cuenta: la máquina de producción que ejecuta este paquete es: 10.50.1617 y mi máquina en la que estoy desarrollando (y la mayoría de las máquinas en las que estoy probando) son: 10.50.4000 . He planteado esto como un posible problema con nuestro Ops DBA y espero que consigamos todo coherente.

Con suerte, esto ayudará a cualquier otra persona que tenga un problema similar. Si alguien desea información o detalles adicionales (creo que lo he cubierto todo), por favor solo comente aquí y hágamelo saber. Estaré encantado de actualizar esto para que sea más útil para cualquier persona que venga en el futuro.


Sé que esto es un año más tarde, pero cuando abrí el administrador de conexión de archivos planos, para el calificador de texto tenía "_x003C_none_x003E_". Reemplazo el código hexadecimal "_x003C_none_x003E_" y coloco flechas como debería ser, "<" ninguno ">" (el editor está eliminando las flechas), y dejó de dejar caer la última fila del archivo.


Tuve exactamente el mismo error. Mi archivo de texto fuente contenía caracteres Unicode y lo resolví guardando el archivo de texto usando la codificación Unicode (en lugar de la codificación predeterminada utf-8) y marcando la casilla de verificación Unicode en el cuadro de diálogo Fuente de Datos.