2012-10-24 79 views
18

私はssisでExcelからデータを抽出しています。エクセルカラムの1つにblankの値が含まれています。だから私はblankの値をnullに置き換える必要があります。そうでなければ、私のパッケージは失敗するでしょう。 データフローでssisで空白をnullに変換する方法

LEN(TRIM([ColumnName]))==0 ? NULL(DT_WSTR, 10) : [ColumnName] 

答えて

16

あなたはまた、ヌルを保持するオプションをチェックしたい場合がありますソースと宛先の両方の接続(利用可能な場合)の値

+3

これはポイントではありません!私はあなたの提案を試みたが、それは動作していません。空の値をNULLまたはユーザー定義の値に置き換えるExpressionが必要です。 –

+1

まあ、あなたが正しいと思います。これがフラットファイルの場合は、フラットファイルソースにヌル値を保持するオプションがあります。これを有効にして、宛先接続(OLEDBなど)に「NULL値を保持する」オプションを有効にすると、派生列変換を使用して置換する必要がなくなる可能性があります。 – Thony

+0

Hmm !!!私はソースとしてExcelを持っています。 Excelには空のセルがいくつか含まれていて、DBにロードするとNULLが返されます。式(条件付き分割)を使用しようとしましたが、動作しません。できるだけ早くエラーを貼り付けます。 –

6

は、あなたが(仮定のデータ型の下に文字列/ varchar型である)のようなものを試してみました。あなたの列および式では、列が空である場合にはnullを返すことを確認します

ColumnName == "" ? NULL(DT_WSTR,50) : ColumnName

のコード行を置く置き換え

+0

私はこれを試してみましたが、それはそれは我々が日付のLTRIMを使用することはできません日付だ文字列ではありません...... :( –

+0

その後、トリムを取り外し.....直接LENを使用関数 –

35

はDerivedColumnコンポーネントを使用します。

+0

派生列なしでこの式を使用できますか? –

+0

同じ列を別のDerivedColumnまたはより複雑な式を使用せずに複数回置き換えることはできますか? – Hybris95

1

日付の列の文字列をNULLに置き換える場合と同様のインスタンスがありました。

LEN(お客様のデータ)< 2? NULL(DT_WSTR、50):your_data

この場合、文字列の長さは1だけです。次に、データ変換変換を使用してdt_dbtimestamp型に変換しました。

希望に役立ちます!オプションで確認し、上記の問題のため

1

修正:::::

送信元および宛先必見は、NULL値を許可し、それが動作します。

+0

私の場合はフラットファイルソースを使用していましたが、左側の「接続マネージャ」の下のオプションはチェックボックス「データフローのヌル値としてソースからヌル値を保持する」でした – PeterVermont

0

派生列コンポーネントと条件式を使用する必要があります。これは条件文であるため、ブール結果を作成するにはデータ型が同じである必要があります。

これを使用してみてください:

ColumnName == (DT_DATE)"" ? NULL(DT_DATE) : ColumnName 
関連する問題