2016-12-13 3 views
0

私は以下のような状況があります: csvからシステムにデータをインポートするためにSSISでプロジェクトを作成する必要がありますが、これを行うにはいくつかの列を読み、この列の1つは値の「グループ」です。 計画の水平線とこの水平線の値は各プロセスを変更することができるため、プロセスによっては5カ月と15カ月になることがあります。SSISのスクリプトコンポーネントを使用して列を作成する方法は?

ファイル(csv)は常に21個の列で埋められますが、(22,23 ...)の後に1,2またはそれ以上の列(水平線)があるかどうかはわかりません。

この状況では、スクリプト変換編集から「入力と列」の列を作成できません。水平線の長さに基づいて作成する必要があります。

だから私の質問は実行時に私は水平線の長さを発見する列を作成することが可能です。

よろしくお願いいたします。

+0

短い答え:いいえ、実行時にSSISで列を作成することはできません。宛先の列数が変更された場合は、メタデータを更新する必要があります。また、COMMANDの宛先を使用してINSERTステートメントまたはStored Procを各行に実行することもできますが、これはパフォーマンスを低下させます。 –

答えて

1

SSISはこのようには動作しません。列の数は設計時に設定されます。

妥当な上限値、たとえば50列を設定できる場合は、データの最後の「列」を読み込み、スクリプトコンポーネントを介してそれらのフィールドに解析できます。それ以外の場合は、ファイルの前処理を行い、可変幅の行を正規化されたセットにピボット解除します。

1

これは、2つの方法で実行できます。

  1. 派生列変換を追加スクリプトコンポーネント https://msdn.microsoft.com/en-us/library/ms188192.aspx

  2. に列を追加し、適切な発現にカスタム列を追加します。

+0

これは私のこの質問に答えて私にこのポストにつながった。スクリプトコンポーネントを使用して列を追加する方法でした。 Output0に列を追加するだけです。 Input0_ProcessInputRowメソッドで、必要な値を列に割り当てます。私は具体的にSQLでやるには複雑すぎる文字列を作成しなければなりませんでした。 – gwgeller

0

すべての回答のTks。私は自分のビジョンを変えて違うものを作りました。 スクリプトのトランスフォーメーションを使用して確認します:

  1. 作成する必要のある列の数。
  2. 接続を開き、水平線の列を削除します。
  3. 新しい水平線に基づいて列を再度作成します。

私は、列を埋めるためのすべてのロジックを実行するプロシージャを呼び出す実行SQLタスクをインクルードしました。

よろしく、

関連する問題