2011-08-06 5 views
0

私はフラットファイル(csvファイル)を取り出し、その位置で別のフラットファイルにロードします。たとえば、レコードタイプ、Emp番号、日付の3つの列に位置制約があります。 Likeレコードタイプは長さ2でデータタイプはアルファ、Emp番号は長さ6、データタイプは数値、長さタイプは26で、フォーマットはyyyy-mm-dd.hh.mm.ssです。 000000。SSISで数値の列と日時の長さを設定する方法は?

だから、フラット・ファイルの私の結果は、私は二つの問題

ファーストを持っています。この

016543092011-08-05.11.08.34.000000 
026540392011-08-05.11.10.59.000000 

のようになります。私は、私が展開すると6に、数値の長さを設定することはできませんよさ私の長さがブロックされ、フラットファイルソースでもデータ変換でも精度が変わるだけで、数値としてEmp番号のデータ型を指定すると、csvファイルが表示されます。その結果、このフィールドの隣には、出力ファイルに不要な空白が追加されています。

次はdatetime - >私はこれを設定すると長さを設定できませんdate型のデータ型を持つ列。私の現在の結果で

私はこのように置くアウトを

01654309     2011-08-05.11.08.34.000000 
02654039     2011-08-05.11.10.59.000000 
(私はまた、数値と日付の時間の両方のための長さを設定することはできませんよとの間に来る空白の場所を避けることはできませんよ)を取得

私はこの問題を処理するさまざまな方法を提案してください。私はこのプロセスの間にステージングテーブルを使用しようとしましたが、問題は依然として一般的です。

答えて

1

SSISは、フラットファイルに文字列値のみを格納できるため、非文字列データ型をフラットファイルに暗黙的に変換して文字列にエクスポートします。変換は暗黙的なので、その変換をどこからでも制御することはできません。変換を明示的な文字列にする必要がありますし、それをあなたのコントロールの下に置くことで、必要な書式を得ることができます。 Destinationの前にDerived Columnコンポーネントを追加します。たとえば、新しい列を作成し、RIGHT( "000000" +(DT_WSTR、6)[EmpNumber]、6)などの式を使用して先行ゼロの入力文字列を取得するなど、数値を明示的に変換します。 Flat File Destinationでは、EmpNumberの代わりにこの新しい列をマップする必要があります。フラットファイル接続マネージャーを変更してデータ型を長さ6の文字列に変更する必要があります(そうしないと、検証エラーが発生します)。

関連する問題