- - PR -
テキストデータの一括書き込みを行うには
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-26 16:17
テキストファイルに書かれたカンマ区切りのデータ(150000件)をSQLServerに書き込む
処理をVB.NETにて作成しています。 当初、VB.NETにてテキストファイルから1行ずつ読み込みInsertを行っていたのですが、 処理が30分程度かかるため、ストアドプロシージャを使うことになりました。 ストアドプロシージャにて「Bulk Insert」を使用したとこと42秒で処理が完了したのです が、「Bulk Insert」を使用するとなるとSQLServerへテキストファイルをコピーしなければな らず、サーバー上にもクライアント上にも共有フォルダを作成したくないため、VB.NETからテ キストファイルをすべて読み込み、ストアドプロシージャの引数に渡してそのテキストデータを 「Bulk Insert」のように一括書き込みを行いたいのですが、そのようなことは可能でしょう か? わかられる方ご教授願います。 VB.NET 2003 SQLServer2000 SP3 | ||||
|
投稿日時: 2005-05-27 08:00
bcp ではダメでしょうか?
| ||||
|
投稿日時: 2005-05-27 09:09
bcpを使用したことがないのですが、bcpはテーブル、ビューそしてテキストファイルからの書 き出しだったと思うのですが、ストアドプロシージャの引数に入れたテキストデータをbcpで 書き込むことができるのでしょうか? | ||||
|
投稿日時: 2005-05-27 11:47
bcp.exeでテキストファイルからテーブルへインポートせよ ってことでは。
| ||||
|
投稿日時: 2005-05-27 20:36
質問の内容としては、
・カンマ区切りのテキストデータを SQL Server に入れたい ・SQL Server のインストールされているマシンとテキストファイルのあるマシンは異なる ・VB.NET で作成したアプリケーション上で行いたい ということでしょうか? アプリケーションを実行するマシン上に SQL Server のクライアントツールがインストールされていれば、117さんも書かれている通り bcp.exe を使ってテキストファイルのデータをテーブルにインポートできると思います。 | ||||
|
投稿日時: 2005-05-31 15:39
水谷さん、117さん返信ありがとうございます。
VB.NETで処理するマシンとSQL Serverが入っているマシンは異なり、VB.NETで処理するマシンにはSQL Serverクライアントが仕様上いれることができません。 とりあえず、以下の手順でできるようにはなりましたが、自分ではあまりスマートなやり方?ではないような・・ 1.ワークテーブルを作成し、Text型のフィールドにTextファイルの内容をすべて書き出す。 2.VB.NETアプリよりストアドプロシージャを実行する。 3.ストアドプロシージャにてワークテーブルに書き出したTextデータをbcpで一時ファイルに書き出す。 4.3.で出力したファイルをBluk Insertを使って一括書き込みを行う。 テーブルに書き出して、テーブルからファイルに書き出してとその部分で15秒ぐらいかかるのでトータル1分弱で処理を行うことができました。 |
1