2012-07-31 78 views
19

Soy relativamente nuevo en SSIS. Estoy tratando de extraer información de una base de datos Oracle utilizando Microsoft OLE DB para Oracle y estoy usando esta consulta:SSIS: el valor no se puede convertir debido a una posible pérdida de datos

SELECT ID FROM Test 

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

SELECT '1' FROM Test 

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

Actualización 16:30 GMT
me he mirado en esto un poco más y lo que parece ser las columnas que tienen un histograma de 'frecuencia' o 'ninguno' que están causando los problemas. Aquellos con un histograma de 'Altura equilibrada' parecen estar bien.

+0

¿Cuál es el tipo de datos de 'ID' en la tabla' Test'? – billinkc

+0

@ billinkc, parece ser: String [DT_STR] – w0051977

+0

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

Respuesta

31

Esto es algo común. El valor predeterminado en muchos casos para las importaciones en ssis desde otro tipo de sistema donde no se pueden determinar los metadatos para las columnas es por defecto a str (50). Como intenta insertar eso en una columna de un carácter, asume que puede perder datos. Basta con entrar en el componente de origen haciendo clic derecho y seleccionando "Mostrar Editor avanzado ..."

A continuación, vaya a la última pestaña (Propiedades de entrada y salida)

Haga clic en el signo + junto al origen de OLE DB de salida

Haga clic en el signo + junto a columnas de resultados

Resalte la columna ID

Vaya a la longitud Tipo de datos de la propiedad a la derecha del cuadro de diálogo y se cambia de 50 a 1.

+1

Gracias por este +1. La solución fue hacer todo lo contrario a lo que dijiste, es decir, cambiar de 1 a 50 (me apuntaste en la dirección correcta). Supongo que dijiste cambio 50 a 1 porque pensabas que era un tipo entero. - en realidad era un tipo de Cadena. Noté que algunas de las Columnas de salida tenían el tipo de datos incorrecto, p. un entero de cuatro bytes con signo para una cadena. ¿Puedes explicar por qué esto podría haber sucedido antes de aceptar tu respuesta? – w0051977

+0

Supuse que era 1 porque dijiste que funcionaba para '1' Inicialmente pensé que el error estaba en tu próximo paso en el que estarías moviendo los datos importados a un campo de destino más pequeño. Su descripción aquí apunta a que los metadatos están equivocados 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 (ver mi respuesta aquí: http://stackoverflow.com/a/8697899/236348)? –

+1

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

Cuestiones relacionadas