Преобразование строки в десятичное значение в пакете SSIS

У меня есть плоский файл, который я импортирую в SQL Server 2008 с помощью пакета SSIS.

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

Например:

Price    Sign
-----    -----
9212.00 
  29.01    -
 268.00    -
 453.02

Я хочу загрузить это значение в десятичный столбец таблицы.

Для этого я создаю производный столбец в своей задаче потока данных. Выражение для производного столбца — [Sign] + [Price]. Я (используя расширенный редактор) определил производный столбец как десятичный тип [DT_DECIMAL].

Затем я просто загружаю данные (вместе с производным столбцом) в свою таблицу.

Это звучит как хороший способ справиться с этой ситуацией? Есть ли другой метод, который я должен рассмотреть вместо этого? Любые «подводные камни» при использовании этого метода?

Спасибо.


person user1949225    schedule 04.01.2013    source источник


Ответы (2)


Ваш подход кажется лучшим вариантом. Тип данных по умолчанию для каждого столбца из плоского файла — строка. Итак, ваше выражение [Sign] + [Price] выполняет конкатенацию строк. И данные неявно преобразуются в десятичное значение при перемещении в выходной столбец.

Одним изменением, которое улучшит читаемость, является явное преобразование строкового значения в десятичное число. Вы можете изменить выражение в компоненте Derived Column следующим образом:

(DT_DECIMAL, scale)[Sign] + [Price]

где scale — это число, которое будет соответствовать типу данных для вашего выходного столбца.

С этим изменением выходные данные компонента «Производный столбец» будут иметь десятичный тип данных.

person bobs    schedule 07.01.2013

Возможно, это не сработает...

  1. Вам нужно преобразовать Sign в строковый тип данных и Price в числовой.
  2. Затем сравните, если Sign равно "-", если кратно -1.

Пример кода производного столбца:

(DT_WSTR, 1) [Sign]=="-"?  [Price]*-1 :  [Price]

введите здесь описание изображения

person Justin    schedule 04.01.2013
comment
Спасибо за информацию. Можете ли вы объяснить, почему мой подход выше не будет работать? Судя по тому, что я вижу, это действительно сработало. - person user1949225; 05.01.2013
comment
Например (извините, не могу размещать изображения): ‹code› Имя производного столбца Выражение производного столбца Тип данных ------------------ -------- ------ ---------- --------- Final_Price ‹добавить как новый› [знак]+[цена] десятичный[DT_DECI ‹/код› Итак: Цена = 232,43 Знак = - становится -232,43, и когда я загружаю в свою базу данных, это значение входит в столбец таблицы, определенный как десятичный (10,2) как -232,43. Просто хочу убедиться, что я понимаю преимущества второго подхода над первым. Спасибо еще раз. - person user1949225; 05.01.2013
comment
Я понимаю, но до сих пор не знаю, почему это работает, потому что тип данных Sign должен быть строковым, тогда вам нужна сумма Sign строки и Price десятичного числа, это не должно работать. sqlfiddle.com/#!3/d41d8/7527 Какие типы данных стоят перед производными столбцами из Sign и Price. - person Justin; 05.01.2013