2016-11-01 6 views
0

私はデータフロータスクで派生列と条件付き分割で不要な行を削除した後、以下のようなSSISの列を操作しようとしています。これのソースはフラットファイルです。列SSISのシリーズ番号を読み、変更するには?

XXX008001161022061116030S1TVCO3057
XXX008002161022061146015S1PUAG1523
XXX009001161022063116030S1DVLD3002
XXX009002161022063146030S1TVCO3057
XXX009003161022063216015S1PUAG1523
XXX010001161022065059030S1MVMA3020
XXX010002161022065129030S1TVCO3057
XXX01000316102206515901551PPE01504

左から最初の3つの数字(出発「008」第1行)はシリーズを表し、次の3つ(「001」)はシリーズ内の別の番号を表す。私が必要とするのは、最初の3つの数字のすべてを "001"から最後まで変更することです。

希望reslutは、このように次のようになります。

XXX001001161022061116030S1TVCO3057
XXX001002161022061146015S1PUAG1523
XXX002001161022063116030S1DVLD3002
XXX002002161022063146030S1TVCO3057
XXX002003161022063216015S1PUAG1523
XXX003001161022065059030S1MVMA3020
XXX003002161022065129030S1TVCO3057
XXX00300316102206515901551PPE01504 ...

私の潜在的な解決方法は、ファイルを一時データベーステーブルに読み込んでそこからSQLでクエリすることですが、これを回避しようとしています。

最終的な宛先はフラットファイルです。

SSISでこの問題を解決する方法はありますか?他のソリューションも評価されています。私は間違いなく、ステージング表のアプローチを使用し、これを実現するために、Windowsの機能を使用することになり、事前

+0

出力に送る前にSQLコードでデータを操作できませんか?変更を適用するには 'RANK()'と 'substring'を考えていますか? – Tanner

+0

私はデータベースを作成せずにデータを照会できるようにデータを送信する必要があるのでしょうか?何か案は? –

+0

「前の行」が何であるかを知る必要があるので、SSISでこれを行う唯一の方法は、スクリプト変換またはカスタムコンポーネントを使用することです。または、ステージングテーブルを使用することもできます。SSIS内部で複雑なロジックを構築することをお勧めします –

答えて

1

感謝。 SSISがデータベースエンジン以外のマシンにあり、SSISボックスに処理をオフロードする必要がある場合、私はユースケースを見ることができました。

この場合、私はスクリプト変換を作成します。行を出力に渡す前に、各行を処理して必要な変更を加えることができます。 C#またはVBを使用できます。

多くの例があります。ここにMSDNの記事があります - https://msdn.microsoft.com/en-us/library/ms136114.aspx

関連する問題