SSIS を使用して可変レコード長の CSV ファイルをインポートするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/89372

質問

SSIS 経由で可変レコード長テキスト ファイル (CSV) を SQL Server に取得できた人はいますか?

SSIS を使用して、入力ファイルのレコード長が異なる CSV ファイルを SQL Server テーブルに取得しようと何度も試みました。この質問では、2 つの異なるレコード長は 63 バイトと 326 バイトです。すべてのレコード長は、同じ 326 バイト幅のテーブルにインポートされます。

インポートするレコードは 100 万件以上あります。
インポート ファイルの作成を制御することはできません。
SSIS を使用する必要があります。
これがバグとして報告されていることを MS に確認しました。いくつかの回避策を試しました。ほとんどの場合、レコードをインターセプトするカスタム コードを記述しようとしましたが、それが希望どおりに動作しないようです。

役に立ちましたか?

解決

私も同様の問題を抱えており、カスタム コード (スクリプト タスク) と [データ フロー] タブのスクリプト コンポーネントを使用しました。

スクリプト コンポーネントにフィードするフラット ファイル ソースがあります。その中で、コードを使用して受信データを操作し、宛先に合わせて修正します。

私の問題は、プロバイダーが利用可能な日付として「000000」を使用していて、別の列にパディング/トリムの問題があることでした。

他のヒント

このファイルを問題なくインポートできるはずです。フラット ファイル接続マネージャーを作成するときに必ず選択してください。 区切られた 形式を指定してから、SSIS 列の長さをファイル列の最大長に設定して、あらゆるデータに対応できるようにします。

固定幅形式を使用しているようですが、CSV ファイルには正しくありません (列が可変長であるため)。あるいは、列区切り文字を間違って設定している可能性があります。

同じ問題です。私の場合、ターゲットの CSV ファイルには、ファイル本体とはまったく異なる形式のヘッダーとフッターのレコードが含まれています。ヘッダー/フッターは、ファイル処理の完全性を検証するために使用されます (日付/時刻、レコード数、合計金額 - 他の名前で「チェックサム」など)。これは「メインフレーム」環境のファイルに一般的な形式で、まだ使い始めていませんが、スクリプトを使用してヘッダー/フッターを削除し、残りを新しいファイルとして保存し、新しいファイルを処理する必要があると予想しています。ファイルを作成し、検証を実行します。MS がすぐに使える機能を期待できるわけではありません (でも、あればきっといいですよね?)。

C# を使用してスクリプト タスクを作成し、各行を反復処理し、適切な量のカンマを埋め込んでデータを埋め込むことができます。もちろん、これはすべてのデータが適切な列と一致していることを前提としています。

つまり、各レコードを読み取るときに、カンマの数を「カウント」できます。次に、正しい数のカンマになるまで、X 個のカンマをレコードの末尾に追加します。

Excel には、CSV に変換するときにこの種のファイルが作成される問題があります。

これを「手動」で実行できる場合、これを解決する最善の方法は、Excel でファイルを開き、レコードの「最後」に列を作成し、その列を最後まで埋めることです。 1s または他の文字。

面倒ですが、すぐに解決できる可能性があります。

これを実行する能力がない場合は、上記と同じことをプログラムで実行できます。

それをテスト ファイルとしてインポートし、列区切り文字を「,」に、行区切り文字を CRLF に設定できないのはなぜでしょうか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top