SSIS: el valor no se puede convertir debido a una posible pérdida de datos

Soy relativamente nuevo en SSIS. Estoy tratando de extraer información de una base de datos Oracle usando Microsoft OLEDB para Oracle y estoy usando esta consulta:

SELECT ID FROM Test

Recibo un mensaje de error que dice: the value cannot be converted because of a potential loss of data. Si cambio la consulta a la siguiente, entonces funciona:

SELECT '1' FROM Test

Creo que está fallando porque la identificación no es un número entero. Sin embargo, el administrador de conexión de archivos planos muestra que OutputColumnWidth es 50. ¿Qué estoy haciendo mal?

Actualización a las 16:30 GMT
He investigado esto un poco más y parece que las columnas que tienen un histograma de 'frecuencia' o 'ninguno' son las que están causando los problemas. Aquellos con un Histograma de 'Altura Equilibrada' parecen estar bien.

preguntado el 31 de julio de 12 a las 15:07

¿Cuál es el tipo de datos de ID en la mesa Test? -

@ billinkc, parece ser: Cadena [DT_STR] -

@billinkc, he editado la pregunta. Por favor échale un vistazo. -

mi experiencia dice que se está quejando (como crees con razón) debido a la falta de coincidencia del tipo de datos y la posibilidad de truncamiento. Creo que puede obligarlo a hacer la transformación de todos modos y creo que solo es seguro y debe agregar un manejo de errores en su paquete SSIS. ver msdn.microsoft.com/en-us/library/ms141706.aspx -

@PaulSullivan, ¿podría explicar cómo puedo "forzarlo a hacer la transformación". Gracias. -

1 Respuestas

Esto es algo común. El valor predeterminado en muchos casos para las importaciones a ssis desde otro tipo de sistema donde no se pueden determinar los metadatos para las columnas es el valor predeterminado de str(50). Dado que está tratando de insertar eso en una columna de un carácter, se supone que puede perder datos. Simplemente acceda al componente de origen haciendo clic con el botón derecho y seleccionando "Mostrar editor avanzado..."

Luego navegue a la última pestaña (Propiedades de entrada y salida)

Haga clic en + junto a Salida de origen OLE DB

Haga clic en el + junto a Columnas de salida

Resalte la columna ID

Desplácese hasta la Propiedad de tipo de datos de longitud a la derecha del cuadro de diálogo y cámbiela de 50 a 1.

Respondido 31 Jul 12, 20:07

Gracias por este +1. La solución fue hacer todo lo contrario a lo que dijiste, es decir, cambiar 1 a 50 (me indicaste la dirección correcta). Supongo que dijiste cambiar 50 a 1 porque pensaste que era un tipo entero. - en realidad era un tipo String. Me di cuenta de que algunas de las columnas de salida tenían el tipo de datos incorrecto, por ejemplo, un entero con signo de cuatro bytes para una cadena. ¿Puede explicar por qué esto podría haber sucedido antes de que acepte su respuesta? - w0051977

Supuse que era 1 porque dijiste que funcionaba para '1'. Inicialmente pensé que el error estaba en el siguiente paso en el que estabas moviendo los datos importados a un campo de destino más pequeño. Su descripción aquí indica que los metadatos son incorrectos en la importación real. ¿Está utilizando un controlador para Oracle que está al mismo nivel que Oracle DB? Además, ¿cuál es el estado de la bandera AlwaysUseDefaultCodePage (vea mi respuesta aquí: stackoverflow.com/a/8697899/236348)? - Guillermo Salzman

Gracias. Ya había configurado el indicador AlwaysUseDefaultCodePage según su enlace antes de escribir la pregunta. ¿Qué quiere decir con "metadatos incorrectos" y "al mismo nivel"? - w0051977

Gracias por esto. ¿Eres capaz de responder a mi otra pregunta, aquí? stackoverflow.com/questions/11765026/… - w0051977

Me funcionó a mi también. Asegúrese de poder ingresar a las Columnas de salida y asegúrese de que sus tipos de datos no sean defectuosos. Tuve que cambiar los que intentaban pasar como flotadores de doble precisión a Unicode (255) y eso me ayudó. - Geo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.