Permítanme comenzar aclarando que esta no es una pregunta duplicada , ni un duplicado potencial para el caso. He intentado implementar cada respuesta a cada variante que ya existe de este problema en StackOverflow y DBA Stack Exchange, sin suerte.
He estado luchando con este problema durante los últimos dos días (trabajando en ello durante aproximadamente 7 horas al día), e incluso después de buscar en Google el problema, parece que nadie más tiene la misma variante exacta de mi problema.
¿Qué estoy tratando de hacer?
En SSIS, estoy tratando de leer un archivo CSV e insertar las filas en una base de datos OLE DB. Para eso, hice la configuración más simple que se haya visto, como se ve a continuación.
Flat File Source
- lee las filas CSV.Derived Column
- actualmente no hace nada (solo está ahí para experimentar).Data Conversion
- actualmente no hace nada (solo está ahí para experimentar).OLE DB Destination
- almacena las filas en la base de datos.
Cuando intento ejecutarlo, deja de ejecutarse en mi destino OLE DB con el siguiente mensaje de error.
Se produjo un error con la columna de entrada "Cantidad" (187) en la entrada "Entrada de destino OLE DB" (51). El estado de la columna devuelta fue: "El valor no se pudo convertir debido a una posible pérdida de datos".
La columna que falla ( Amount
) es actualmente de tipo DT_STR
. Parece ser el tipo en el que tengo más fe en este momento.
Que he probado
- Intenté usar la función
Flat File Connection
"Sugerir tipos" en la columna que falla. Esto hizo que recomendara elSingle byte signed int
tipo de datos.- Se detiene en mi fuente de archivo plano .
- El error es Error en la conversión de datos. La conversión de datos para la columna "Cantidad" devolvió el valor de estado 2 y el texto de estado "El valor no se pudo convertir debido a una posible pérdida de datos".
- He intentado usar el
Derived Column
para convertir la columna en unDT_I4
.- Se detiene en mi columna derivada .
- El error es Error en la conversión de datos. La conversión de datos para la columna "Cantidad" devolvió el valor de estado 2 y el texto de estado "El valor no se pudo convertir debido a una posible pérdida de datos".
- He intentado usar el
Data Conversion
para convertir el valor de mi columna a aDT_I4
.- Se detiene ante mi
Data Conversion
. - El error es Error en la conversión de datos. La conversión de datos para la columna "Cantidad" devolvió el valor de estado 2 y el texto de estado "El valor no se pudo convertir debido a una posible pérdida de datos".
- Se detiene ante mi
- Intenté cambiar la longitud de mi
DT_STR
valor en el origen y el destino.- Se detiene en el origen o el destino según la configuración.
- Intenté conectarme usando un conector de origen de Excel con y sin el
IMEX=1
agregado a la cadena de conexión. Sin suerte.
Mi sentido de programación me dice que estoy jodido. Nunca he encontrado un problema tan grande para algo tan simple.
¿Y por qué no puedo ignorar la pérdida "potencial" de datos? Es realmente frustrante por decir lo menos.
Mi sistema
Es una máquina Windows Server 2008 R2 con SQL Server 2008 instalado. La máquina en sí se actualiza completamente a través de Windows Update.
fuente
Amount
?Amount
columna. Tome una captura de pantalla y actualice su pregunta con esta imagen.Respuestas:
Me he encontrado con esto varias veces y el problema ha sido una falta de coincidencia de los tipos de datos en los parámetros de exportación / importación. Lo primero que debe hacer es verificar esos parámetros haciendo clic derecho en el origen o el destino, seleccionando Editor avanzado. Vaya a Propiedades de entrada y salida y verifique el tipo de datos para esa columna para todos los elementos, tanto externos, de salida y de entrada. Por lo general, he visto una variación aquí, a menudo una es Unicode (WSTR) y la otra I4 o DSTR.
fuente
Ignorando el error
En primer lugar, debe poder ignorar el truncamiento de cadenas yendo a la Fuente de archivo plano, Salida de error y luego cambiando "Componente de error" en "Truncamiento" a "Ignorar error".
Mejor solución
El verdadero problema podría ser que la longitud de la cadena dentro de la tubería SSIS todavía es incorrecta porque se inicializó en algún momento anterior.
Puede determinar si ese es el caso haciendo doble clic en la flecha verde de su Fuente de archivo plano (o después de la Conversión de datos / columna derivada) y seleccionando "Metadatos". Allí puede ver la longitud del campo dentro de la tubería.
Si a menudo ha visto que los metadatos ya no coinciden con el componente fuente, principalmente si se crea la Fuente de archivo plano Y su correspondiente conexión a través del Asistente.
Mi sugerencia sería eliminar la conexión y el origen del archivo plano y volver a crearlos, ya que no he encontrado una manera de volver a sincronizar los metadatos de la tubería con los componentes de origen.
fuente