2016-05-10 6 views
0

Я импортирую тысячи CSV-файлов в SQL-базу данных. Каждый из них имеет две колонки: дата и значение. В некоторых файлах столбец значений содержит просто период (например: «.»). Я пытался создать производный столбец, который будет обрабатывать любую ячейку, содержащий период со следующим кодом:SSIS Derived Column - текст в числовом поле не преобразовывается

FINDSTRING((DT_WSTR,1)[VALUE],".",1) != 0 ? NULL(DT_R8) : [VALUE] 

Но, когда пакет запускается он получает следующее сообщение об ошибке, когда он достигает ячейки с периодом это:

The data conversion for column "VALUE" returned status value 2 and status text 
"The value could not be converted because of a potential loss of data". 

Я предполагаю, что может быть экранирующего символа, что мне не хватает в моей функции FindString, но я не могу показаться, чтобы найти то, что это может быть. У кого-нибудь есть мысли о том, как я могу обойти эту проблему?

+0

Я думаю, что нужно поменять местами между выражениями, как FindString ((DT_WSTR, 1) [VALUE] "", 1)! = 0? [VALUE]: NULL (DT_R8) –

ответ

0

Попытка отладить такие вещи, вот почему я всегда выступаю за добавление многих производных столбцов в поток данных. Невозможно отладить это целое выражение. Вместо этого сначала найдите позицию периода и добавьте это как новый столбец. Затем вы можете подать это в тройную операцию, и понемногу вы можете добавить зрителей данных, чтобы убедиться, что видите то, что ожидаете увидеть.

Лично я бы выбрал другой подход. Кажется, что вы хотите сделать любые столбцы . в нулевом типе DT_R8.

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

RTRIM(LTRIM(Value)) 

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

(TrimmmedValue == ".") ? Trimmedvalue : NULL(DT_WSTR, 50) 

Теперь вы можете добавить свой окончательный Производный столбец, в котором мы преобразуем строковое представление Value в представление с плавающей запятой.

IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue 

Если выше показывает ошибку, то необходимо применить следующую версию, поскольку я никогда не могу вспомнить последовательность оценки для трехкомпонентных операций, которые изменяют тип.

(DT_R8) (IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue) 

Примеры нарушения этих операций на много шагов для отладки

0

Вы можете сделать это следующим образом:

TRIM(Value) == "." ? NULL(DT_R8) : (DT_R8)Value 

enter image description here

enter image description here

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