plano crear busqueda archivo ssis flat-file dataflow dataflowtask

crear - busqueda ssis



¿Cómo obtengo el flujo de datos de SSIS para poner ''0.00'' en un archivo plano? (4)

¿Podría usar una columna derivada para cambiar el formato del valor? ¿Lo intentaste?

Tengo un paquete SSIS con un flujo de datos que toma una fuente de datos ADO.NET (solo una tabla pequeña), ejecuta una consulta de selección * y los resultados de la consulta en un archivo plano (también intenté simplemente extraer toda la tabla y no usando una selección de SQL).

El problema es que la fuente de datos extrae una columna que es un tipo de datos Money, y si el valor no es cero, entra en el archivo plano de texto muy bien (como ''123.45''), pero cuando el valor es cero, aparece en el archivo plano de destino como ''.00''. Necesito saber cómo volver a poner el cero inicial en el archivo plano.

He intentado varios tipos de datos para la salida (en el administrador de conexión de archivos planos), incluyendo moneda y cadena, pero esto parece no tener ningún efecto.

Probé una declaración de caso en mi selección, así:

CASE WHEN columnValue = 0 THEN ''0.00'' ELSE columnValue END

(aún resulta en ''.00'')

Probé variaciones sobre esto como este:

CASE WHEN columnValue = 0 THEN convert(decimal(12,2), ''0.00'') ELSE convert(decimal(12,2), columnValue) END

(Aún resulta en ''.00'')

y:

CASE WHEN columnValue = 0 THEN convert(money, ''0.00'') ELSE convert(money, columnValue) END

(resultados en ''.0000000000000000000'')

Este pequeño problema tonto es matarme. ¿Alguien puede decirme cómo obtener un valor cero de la base de datos de datos de Money en un archivo plano como ''0,00''?


Dado que está exportando a un archivo de texto, simplemente exporte datos preformateados.

Puede hacerlo en la consulta o crear una columna derivada, sea lo que sea que le resulte más cómodo.

Elegí hacer la columna de 15 caracteres de ancho. Si importas a un sistema que espera números, esos ceros deberían ignorarse ... ¿por qué no estandarizar la longitud del campo?

Una solución simple en SQL es la siguiente:

select cast(0.00 as money) as col1 ,cast(0.00 as numeric(18,2)) as col2 ,right(''000000000000000'' + cast( 0.00 as varchar(10)), 15) as col3 go col1 col2 col3 --------------------- -------------------- --------------- .0000 .00 000000000000.00

Simplemente reemplace ''0.00'' con el nombre de su columna y no olvide agregar FROM table_name, etc.


Estaba teniendo exactamente el mismo problema, y ​​la respuesta de Soo funcionó para mí. Envié mis datos a una transformación de columna derivada (en la caja de herramientas Transformación de flujo de datos). Agregué la columna derivada como una nueva columna del tipo de datos Unicode String ([DT_WSTR]) y usé la siguiente expresión:

Precio <1? "0" + (DT_WSTR, 6) Precio: (DT_WSTR, 6) Precio

¡Espero que eso ayude!


Usé el editor avanzado para cambiar la columna de double-precision float a decimal y luego establecí la Scale en 2: