0

たとえば、6 つの列を持つ完全な CSV ファイルがあります。

Rec ID | Charge Category | Charge Type Category | Product Name | Account No | Cost 

私はこの状態で問題なくSSISを実行しています。

ただし、CSV ファイルの 1 つが、たとえば以下の列を使用していることがわかりました。

Rec ID | Charge Type Category | Product Name |Cost

「フラット ファイル接続マネージャー」タイプの接続が機能しない場合、この原因をどのように処理すればよいでしょうか?!?!

調査する必要がある他のアプローチはありますか?

ありがとう

4

1 に答える 1

0

これら 2 つのケースしかない場合は、3 つのファイル接続を作成できます。最初のものを使用して行全体を読み取り、ヘッダーのみを処理します。その中の列の数を数え、2 つの並列フローを作成します。1 つは「短い」形式用、もう 1 つは「長い」形式用で、それぞれが異なる接続定義を使用します。

もう少し複雑なオプションは、データ フローのスクリプト変換でこれらすべてを行うことです。CSV ファイルでファイルを 1 行ずつ読み取ってスクリプトに渡します。スクリプトは行を解析し、既存の列の値を、定義されたすべての可能な出力のサブセットに割り当てます。出力は、可能なすべての列が構成されるように定義する必要があります (これに似ています: SSIS 分割文字列)

ソリューションの主な部分は次のとおりです。

  1. ファイルを 1 行ずつ読み取るフラット ファイル接続 (フィールド区切り文字を ##$# などの存在しない組み合わせに設定) および

  2. 単一の入力 (FullLine) とすべての可能な出力が定義されている変換モードの Scipt タスク:

    ここに画像の説明を入力

スクリプトでは、ここで美しく説明されている概念を使用できます: http://dwbi1.wordpress.com/2011/02/27/ssis-importing-files-read-the-first-n-rows/

これをすべて書いた後、可能性のあるすべての列を出力として定義するという同じ考え方を使用して、スクリプト タスク ソースを使用するのがおそらく最も簡単な方法であることに気付きました。

于 2012-10-25T10:46:23.980 に答える