У меня есть пакет 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'?
Могли бы вы использовать производный столбец для изменения формата значения? Вы пробовали это?
Поскольку вы экспортируете в текстовый файл, просто экспортируйте данные в предварительно отформатированном виде.
Вы можете сделать это в запросе или создать производный столбец, как вам удобнее.
Я решил сделать столбец шириной 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 имя_таблицы и т.д..
У меня была точно такая же проблема, и такой ответ сработал для меня. Я отправил свои данные в преобразование производного столбца (в наборе инструментов «Преобразование потока данных»). Я добавил производный столбец как новый столбец типа данных Unicode String ([DT_WSTR]) и использовал следующее выражение:
Price <1? «0» + (DT_WSTR, 6) Цена: (DT_WSTR, 6) Цена
Надеюсь, это поможет!