2017-12-21 36 views
1

SSIS 패키지가 있는데 여기에는 네 가지 데이터 흐름 작업이 있습니다. 각 데이터 흐름 태스크 (예 : A, B, C, D)는 동일한 파생 열 표현식을 가지며 다른 oledb 소스의 결과를 동일한 oledb 대상에 추가합니다.SSIS Derived Column 오류 표현식

데이터 흐름 태스크 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의 데이터 흐름 작업에 표시 : 모든

[Derived Column [100]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Derived Column" failed because error code 0xC0049064 occurred, and the error row disposition on "Derived Column.Outputs[Derived Column Output].Columns[SubmissionCommon]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.

+1

일부 줄에서'SUBSTRING ([작업 항목/제출 번호 없음], 4,2)'을 (DT_NUMERIC, 18,2)로 구문 분석 할 수 없다고 생각합니다. – Hadi

+1

오류가 발생합니까? A, B 및 D가 비활성화되어있는 동안 데이터 흐름 작업 C를 실행하면? 또한 C에서 사용하는 oledb 소스의 Work 항목과 Submission No # 값을 모두 검토 했습니까? NULL 값은 표현식에서 사용 된 나눗셈에서 문제를 일으킬 수 있습니다. 이 oledb 소스에서 Work 항목과 Submission No 필드에 대해 ISNUMERIC 함수를 사용하여 SQL 쿼리를 실행하면 해답을 제공 할 수 있습니다. – user3662215

+0

아니요, 저는 다른 데이터 흐름 작업에서 A, B, C 및 D를 모두 실행하지만 동일한 SSIS 패키지 내에서 실행합니다. C에서 오류가 발생하며 약 300,000 행의 27494 행이 반환됩니다. – katy89

답변

1

먼저, 내가 SUBSTRING([Work item /Submission no#],4,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)이 숫자가 아니면 오류를 던질 것이기 때문입니다. 난 이미 대답 않았다 SQL script to SSIS expression

1

: 당신이 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);