Ошибка производного столбца служб 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);