Ошибка производного столбца служб 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, а размещение строки ошибки на «Производный столбец.Outputs [Производный столбец] .Columns [SubmissionCommon]» указывает сбой при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть опубликованы сообщения об ошибках с дополнительной информацией об ошибке.


person katy89    schedule 21.12.2017    source источник
comment
Я думаю, что причина ошибки в том, что SUBSTRING([Work item /Submission no#],4,2) нельзя разобрать на (DT_NUMERIC,18,2) в некоторых строках   -  person Hadi    schedule 21.12.2017
comment
Возникает ли ошибка, если вы запускаете задачу потока данных C, когда A, B и D отключены? Кроме того, полностью ли вы просмотрели все значения рабочего элемента и № # заявки из источника oledb, используемого C? Значение NULL могло вызвать проблему при делении, используемом в выражении. Выполнение SQL-запроса с функцией ISNUMERIC для полей Work item и Submission No # в этом источнике oledb может дать ответ.   -  person user3662215    schedule 21.12.2017
comment
Нет, я запускаю A, B, C и D в разных задачах потока данных, но в одном пакете SSIS. Это вызывает ошибку в C, примерно 27494 строки из 30000 строк.   -  person katy89    schedule 21.12.2017
comment
мне кажется, я уже ответил на этот вопрос ранее на этой неделе   -  person KeithL    schedule 21.12.2017
comment
@KeithL добро пожаловать в клуб ...   -  person Jacob H    schedule 21.12.2017


Ответы (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

person Hadi    schedule 21.12.2017

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

если вы предпочитаете компонент сценария 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);
person KeithL    schedule 21.12.2017