2017-12-21 8 views
1

SSISパッケージがあります。ここには4つの異なるデータフロータスクがあります。各データフロータスク(例えば、A、B、C、D)は同じ導出列式を持ち、異なるoledbソースからの結果を同じoledb宛先に追加します。式のSSIS派生列のエラー

データフロータスクCだけでは次のようなエラーが発生し、A、B、Dには問題はありませんが、すべて同じ派生列式を持ちます。

派生列式:Cのデータフロータスクに示す

(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エラー:すべての

[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([Work item/Submission no#]、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では30000行のうち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);