Как получить поток данных SSIS, чтобы поместить '0.00' в плоский файл?

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

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

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

Я пробовал оператор case в моем select, например:

  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"?

4 ответов


можно ли использовать производный столбец для изменения формата значения? Ты пробовал?


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

Цена

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


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

enter image description here


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

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

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