web-dev-qa-db-ja.com

"-"をSSISの派生列でNULLに置き換えます

Excelシートから情報を抽出してデータベースにロードしています。データベースにロードする前に、Excelシートのすべての"-"NULL値に変換する必要があります。

私は現在、データフローオブジェクトの派生列変換でこれを実行しようとしています。データ型がUnicode文字列[DT_WSTR]の場合は機能しますが、倍精度浮動小数点[DT_R8]は機能しません。

Unicode文字列で機能する式は次のとおりです。

[EquipmentID]  == "-" ? (DT_WSTR,50)NULL(DT_WSTR,50) : [EquipmentID]

倍精度浮動小数点数で機能しない式は次のとおりです。

[SideDoorType] == "-" ? (DT_R8)NULL(DT_R8) : [SideDoorType]
3
Jonathan

まず、NULL()関数(DT_R8)NULL(DT_R8)をキャストする必要はありません。キャストせずに使用できます。 DT_STRを使用する場合は、キャストする必要があるのはあなただけです。続きを読む:

問題は、2つのデータ型を返すCaseステートメントを使用していることです。

[SideDoorType] == "-" ? NULL(DT_R8) : [SideDoorType]

[SideDoorType]列を文字列値"-"と比較しています。等しい場合は、倍精度浮動小数点数NULLを返します。それ以外の場合は[SideDoorType]を返します。カラム。

あなたはそれが働いているかもしれない次の表現を使って試すことができます

[SideDoorType]タイプがDT_WSTRまたはDT_STRの場合、偽の部分式で列をキャストする必要があります

[SideDoorType] == "-" ? NULL(DT_R8) : (DT_R8)[SideDoorType]

[SideDoorType]タイプがDT_R8の場合、比較式で列をキャストする必要があります

 (DT_WSTR,50,1256)[SideDoorType] == "-" ? NULL(DT_R8) : [SideDoorType]

また、これらの2つの式が機能しない場合、列にDT_R8に変換できない値が含まれているか、またはScript ComponentDerived Columnの代わりに、フロートにキャストする前にデータをクリーンアップするスクリプトを記述します

1
Hadi