Как я заставляю Поток данных SSIS помещать '0.00' в плоский файл?

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

Проблема состоит в том, что источник данных вытягивает столбец, который является Типом данных 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

(Все еще результаты в '.00')

и:

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

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

Этой глупой небольшой проблемой является Киллин' меня. Кто-либо может сказать мне, как получить нулевое значение базы данных Типа данных money в плоский файл как '0,00'?

9
задан theog 19 May 2010 в 18:41
поделиться

3 ответа

Могли бы вы использовать производный столбец для изменения формата значения? Вы пробовали это?

9
ответ дан 4 December 2019 в 10:03
поделиться

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

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

Я решил сделать столбец шириной 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 имя_таблицы и т.д..

1
ответ дан 4 December 2019 в 10:03
поделиться

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

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

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

8
ответ дан 4 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: