2010-05-19 2 views
8

У меня есть пакет SSIS с потоком данных, который использует источник данных ADO.NET (только небольшая таблица), выполняет запрос select * и выводит результаты запроса в плоский файл (я также попытался просто потянуть целую таблицу и не используя выбор SQL).Как получить поток данных SSIS для установки «0.00» в плоском файле?

Проблема заключается в том, что источник данных выталкивает столбец, который является типом данных Money, и если значение не равно нулю, оно попадает в текстовый плоский файл просто отлично (например, «123.45»), но когда значение равно нулю , он отображается в плоском файле назначения как «.00». Мне нужно знать, как вернуть начальный ноль обратно в плоский файл.

Я пробовал различные типы данных для вывода (в диспетчере соединений с плоскими файлами), включая валюту и строку, но это, похоже, не имеет никакого эффекта.

Я попытался тематическое заявление в мой выбор, как это:

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

(по-прежнему приводит к».00')

Я пробовал вариации на том, что, как это:

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

(Still приводит»+0,00')

и:

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

(результаты в».0000000000000000000 ')

Этот глупый маленький вопрос это убивает меня. Может ли кто-нибудь сказать мне, как получить значение базы данных нулевого значения Money Datatype в плоском файле как «0.00»?

+0

Я хотел бы знать причину этой проблемы - я не очень комфортно с взломанным процессором. – PeterX

ответ

9

Не могли бы вы использовать производную колонку, чтобы изменить формат значения? Вы попробовали это?

+0

Отличная идея! Позвольте мне попробовать ... – theog

+0

Хорошо, после битвы (чтобы преобразовать числовое значение в строку), это сработало. Спасибо, Soo! – theog

8

У меня была одна и та же проблема, и ответ Су был сработал для меня. Я отправил свои данные в производное преобразование столбцов (в панели инструментов Преобразование потока данных). Я добавил производный столбец в качестве нового столбца типа данных Unicode String ([DT_WSTR]) и использовал следующее выражение:

Цена < 1? «0» + (DT_WSTR, 6) Цена: (DT_WSTR, 6) Цена

Надеюсь, что это поможет!

+0

Спасибо user346389 ... было полезно включить синтаксис синтаксиса столбца, основанного на SSIS. – theog

1

Поскольку вы экспортируете в текстовый файл, просто экспортируйте данные, предварительно отформатированные.

Вы можете сделать это в запросе или создать производный столбец, независимо от того, с чем вам удобнее.

Я решил сделать колонку шириной 15 символов. Если вы импортируете в систему, которая ожидает числа, эти нули следует игнорировать ... так почему бы просто не стандартизировать длину поля?

Простое решение в SQL выглядит следующим образом:

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 

Просто замените «0.00» с именем столбца и не забудьте добавить FROM table_name, и т.д ..

2

я использовал расширенный редактор, чтобы изменить столбец из double-precision float в decimal, а затем установите Scale в 2:

enter image description here

Смежные вопросы