Serverに5GB前後のCSVを取り込む処理を作成しています。取り込むCSVの仕様は以下です。INSERTで取り込みたかったのですが上記3がフォーマットファイルで対応できないのと区切り文字を「","」とする必要があり文字列内に「","」がある場合、取り込めません。現在はC#でVisualBasic.FileIO.TextFieldParserを使用してCSVを解析しINSERTしていくプログラムを作成して取り込んでいますが処理に7~8時間かかってしまいます。お客様より3~4時間で終わるようにしてほしいという要望があり試行錯誤していますが行き詰っています。何かいい案があればご教授お願いします。今はSSISでどうにかできないか思案中です。するだけで大分性能が改善すると思いますが、それでも不足のようならSqlClient.SqlBulkCopyhttp://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspxの使用も検討してみてください。(0)1000行づつというのは1回のリクエストでINSERT文を1000行投げるという事でしょうか?そのような事ができるのも知らなかったので試して見ます。14:45SqlBulkCopyが早いのは知っているのですが、CSVパーサーで解析した結果をDataReaderで読めるという事ですか?ちょっと試してみます。ありがとうございました。14:47>1回のリクエストでINSERT文を1000行投げるそーです。00:03SqlBulkCopyはDataTableかDataReaderを引数に渡すと思っていました。DataTableですと今回の場合は件数的に無理があるので勝手にDataReaderと判断していました。10:221000行ごとにクエリを実行するようにしたところ2時間弱で処理が終わるようになりました。今回は時間も予算もないのでお客様にはこれで妥協して頂き、私のほうでSqlBulkCopyも試してみようと思います。ありがとうございました。(0)いろいろご助言ありがとうございます。教えて頂いた内容でも性能改善するか試してみます。14:21(1)はあまり関係なさそうと判断して試しませんでした。(2)はアドホッククエリは基本的に書かないので実装済です。JETプロバイダは後学の為にも時間があるときに試してみようと思いました。ありがとうございました。21:070もう一つ。INSERTで取り込みたかったのですが>上記3がフォーマットファイルで対応できないのと>区切り文字を「","」とする必要があり>文字列内に「","」がある場合、取り込めません。あれば、直接取り込めるようにファイルを変換するプログラムを書いて、その後一気に取り込むのはどうでしょう。取り込む時にあれこれ工夫するのではなく、取り込めるようにファイル変換をするほうが作業の切り分け的にも楽かな、と思います。(0)5GB前後のテキストファイルを変換して取込むのも考えましたが以前に別件でテストファイルの変換プログラムをC#で作成したのですが性能が悪くはまった記憶が・・・ですが、BCPなどが使えれば間違いなく取り込みの性能は上がりますので候補の1つとして時間があれば試してみます。ありがとうございました。14:27よくよく考えると今回ボトルネックになっているのはCSVの解析処理ではないので無駄かなと思い提示して頂いた案は止めました。私の技術力不足なのですがCやC++などでテキストファイルの高速変換処理が書ければいいのですが私が書いてもC#と差のないものになってしまいそうで断念します。ありがとうございました。20:500こんにちは。CSVのパースより1行ずつINSERTするのが遅いのですよね?例えば。varchar(1000)だけの列をもつワークテーブルにBCPで取り込む。ワークテーブルみたいなことはどうでしょう。したアドバイスで申し訳ないです。(1)文字列処理はDBの苦手分野との思い込みがあり、考えていない方法でした。有効かもしれませんので試してみます。14:50BCPはやはり高速で取込めました(1時間弱)が、やはりSQLで分解する処理が重くて途中で諦めました。分解する処理をSQLCLRで書くことも考えましたが今回あまり時間がないのでこの方法は諦めます。ありがとうございました。Accessで取り込む」ってのはどうでしょうか。AccessならCSVを直接インポートすることができます。(0)Accessはファイルサイズが2GBまでの制限があるようです。今回、取込みファイルが5GB前後なのでAccessは使えないかと思います。14:29ウォッチこの質問への回答やコメントをメールでお知らせします。