Ошибка производного столбца служб SSIS в выражении

У меня есть пакет служб SSIS, где у меня есть четыре различные задачи потока данных. Каждая задача потока данных (скажем, A, B, C, D) имеет одно и то же выражение производного столбца и добавляет результаты из разных источников oledb в одно и то же место назначения oledb.

Я получаю сообщение об ошибке, как показано ниже, только для задачи C с потоком данных и работает без проблем для A, B и D, хотя все они имеют одинаковое производное выражение столбца.

Выражение производного столбца:

 (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) == (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) ? LEFT([Work item /Submission no#],15) : LEFT([Work item /Submission no#],16)

Ошибка SSIS, отображаемая в задаче потока данных C:

[Производный столбец [100]] Ошибка: код ошибки служб SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. "Производный столбец" не выполнен, так как произошел код ошибки 0xC0049064, а расположение строки ошибки в "Derived Column.Outputs[Вывод производного столбца].Columns[SubmissionCommon]" указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое.

2 ответа

Решение

Прежде всего, я предполагаю, что вы используете (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) == (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) проверить, если SUBSTRING([Work item /Submission no#],4,2) является числовым или нет.

Я думаю, что выражение, которое вы используете, может выдавать ошибку из-за используемых операций приведения. потому что, если SUBSTRING([Work item /Submission no#],4,2) не является числовым, он выдаст ошибку.

Просто следуйте моему ответу на этот вопрос для обходного пути: сценарий SQL к выражению SSIS

Я уже ответил на это:

если вы предпочитаете компонент сценария C# (обязательно добавьте столбцы ввода и вывода):

string test = Row.YourRowToTest;
int someNum; //catches output

Row.ColumnName = int.TryParse(test.Substring(4,2),out someNum) == false
                 ?test.Substring(1, 16)
                 :test.Substring(1, 15);
Другие вопросы по тегам