El valor no se pudo convertir debido a una posible pérdida de datos [cerrado]

12

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.

  1. Flat File Source - lee las filas CSV.
  2. Derived Column - actualmente no hace nada (solo está ahí para experimentar).
  3. Data Conversion - actualmente no hace nada (solo está ahí para experimentar).
  4. 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 el Single byte signed inttipo 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 Columnpara convertir la columna en un DT_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 Conversionpara convertir el valor de mi columna a a DT_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".
  • Intenté cambiar la longitud de mi DT_STRvalor 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=1agregado 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.

Mathias Lykkegaard Lorenzen
fuente
Parece que tuve este problema con un valor (aunque lo saqué de Access) y tuve que usar una página de códigos específica cuando lancé la columna. Sin embargo, ya no tengo acceso al paquete SSIS para verificar lo que hice.
¿Cuál es el tipo de datos de la columna en la que está intentando insertar Amount?
Jon of All Trades
2
Abra su Administrador de conexión de archivos planos para el CSV. Vaya a la pestaña Avanzado y seleccione la Amountcolumna. Tome una captura de pantalla y actualice su pregunta con esta imagen.
billinkc
¿Ya tuve la oportunidad de ver el Connection Manager?
billinkc
1
No creo que estés jodido, pero sin ver la definición de tu Connection Manager, es imposible decirlo.
billinkc

Respuestas:

3

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.

Miguel
fuente
8

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.

Oliver Rahner
fuente
2
Sin embargo, esto no cae bajo "truncamiento". Ya lo probé
Mathias Lykkegaard Lorenzen