2009-02-16 19 views
13

Tengo un paquete SSIS para cargar datos; como puede recordar, hay indicadores que están en los archivos de datos como Y/N char (1) cuando intento cargarlos como indicadores de bits en SQL Server. Estoy especificando las columnas en el archivo de datos como String [DT_STR] y tengo una tarea de conversión de datos para convertirlos en booleanos basados ​​en la siguiente expresión (recibí el mismo error de conversión simplemente especificándolos como DT_BOOL para empezar, a pesar de que SSIS me pedía que dijera qué valores se deben considerar como booleano):SSIS Convertir un char en un booleano/bit

[ColumnName] == "Y" ? (DT_BOOL)1 : (DT_BOOL)0 

ejecutar el paquete da un error y me dice Invalid character value for cast specification y The value could not be converted because of a potential loss of data en la importación real a SQL Server (a través de un destino de OLE DB).

¿Qué me falta aquí para que convierta correctamente?

+0

He estado buscando algo increíblemente * similar a esto, pero no puedo encontrar en ninguna parte de la transformación de conversión de datos dónde hacerlo. ¿Dónde es que estás definiendo esto? –

+1

Creo que lo encontré, en realidad es la transformación de columna derivada. –

Respuesta

11

I fue capaz de resolver mediante el uso de una columna derivada y, en lugar de la sustitución de las columnas CHAR, la creación de nuevas columnas SET para tipo de DT_BOOL así:

[Recycled] == "Y" ? True : False 
+1

Lo siento, he entendido mal, no puede reemplazar ninguna columna en SSIS con una columna de un tipo diferente, siempre tiene que agregar nuevas columnas. –

+1

Aunque en la tarea de conversión puede hacer otra columna con el mismo nombre, pero según mi experiencia, no todos los componentes más adelante en la tubería mostrarán el nombre completo como component.column, por lo que es molesto y peligroso. –

+0

Correcto - Lo descubrí por el camino difícil ;-) –

17

Prueba esto:

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0) 

Esto también tiene la ventaja de establecer automáticamente el tipo de datos de la columna derivada correctamente.

0

que tenía el mismo problema con

(DT_BOOL) ([ColumnName] == "y" 1: 0)

y sólo pude conseguir que funcione mediante la suscripción de la "(DT_BOOL)" parte de la expresión y poniendo el trabajo de convirtiéndolo en booleano en la parte "Tipo de datos" seleccionando "Boolean" [DT_BOOL] No hay problemas después de eso.