0

既存のプロセスの簡単な紹介: SSIS の foreach ループは、エントリ パス フォルダー内のテキスト ファイルを検索してフラット ファイルを SQL Server テーブルにインポートします。インポート後、フラット ファイルをアーカイブ フォルダーにダンプします。これは合計 4 つのフラット ファイルで発生しますが、検索対象はテキスト ファイルのみであるため、問題はありません。

ただし、代わりに提示された新しいアイデアは、SSIS が最初にテキスト ファイルの日付と状態を (ファイル内ではなくファイル名から) 取得するプロセスを実行し、次にそのデータを状態と一緒に SQL Server に挿入することでした。日付を記録してから、ファイルをアーカイブします。この背後にある考え方は、日付が 1 か月前後の場合、SSIS はファイルをインポートしない (または、年が間違っている場合はインポートしない) というものでした。

そのため、SSIS は最初に 4 つのファイルが存在するかどうかを確認する必要があります。- 4 つのファイルが存在する場合、foreach ループに移動します (少なくとも、これがこの問題に対処する最善の方法だと思います)。- 各ループで、プロセスはファイル名から日付と状態を解析する必要があり、データを SQL Server にインポートして、解析された日付と状態を適切な列に追加する必要があります。- 次に、そのファイルをアーカイブして、次のファイルに移動する必要があります。

解析を行ったことがなく、式と接続文字列をいじって現在の月と年を検索しようとしましたが、うまくいきませんでした。

(最後に、私は C# をほとんど知らないので、スクリプト タスクは私の範囲外です)。

4

3 に答える 3

2

スクリプト コンポーネントがなければ、これが起こるとは思えません。もしそうなら、解決策は乱雑な表現の束になるでしょう。

vb.net または c# でスクリプト コンポーネントを実行できます。system.IO 名前空間に慣れてください。Directory.GetFiles() メソッドは、指定されたディレクトリ内のすべてのファイルを返します。For Each ループを実行して、各ファイル名を解析できます。

SSIS に真剣に取り組んでいる場合は、スクリプト コンポーネント (変数の読み取りと書き込みを含む)、system.io 名前空間、およびコンポーネント コードをステップ実行してプロパティを調べる方法に慣れる必要があります。ファイル名の解析、ファイルの読み取り、ファイルの移動、ファイルの削除など、プログラムによるファイル システムへのアクセスを伴わないパッケージを作成することはめったにありません。これはすべて sys.io で実行できます。

于 2012-11-16T02:30:11.173 に答える
1

SSIS 式は、おそらくこの仕事に適したツールではありません。

私はスクリプトタスクを考えています.VBを使い続けていますが、VBの方が読みやすく、同じ結果が得られます。これにより、美しい Try .. Catch ブロックと、正規表現などの非常に豊富な .NET ライブラリのロックが解除されます。あなたは決して振り返ることはありません。

于 2012-11-16T02:24:25.703 に答える
0

私の解決策を投稿するのを忘れました: C# や VB を使用せずに、ファイルの名前をテーブルに挿入し、TSQL を使用してファイル名を解析する方法を見つけました。「SQL タスクの実行」を使用すると、以下の SQL ステートメントを使用できます。

INSERT INTO Table VALUES (?)

プロジェクトの文字列変数が現在のファイルの名前に設定されている場合は、[パラメーター マッピング] でそれを設定します。そこから、SQL テーブルに完全なファイル名があり、それを解析できます。

于 2012-12-03T15:25:57.993 に答える