- PR -

テキストデータの一括書き込みを行うには

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 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
水谷
会議室デビュー日: 2004/05/07
投稿数: 17
お住まい・勤務地: 福島県
投稿日時: 2005-05-27 08:00
bcp ではダメでしょうか?
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2005-05-27 09:09
引用:
bcp ではダメでしょうか?



bcpを使用したことがないのですが、bcpはテーブル、ビューそしてテキストファイルからの書
き出しだったと思うのですが、ストアドプロシージャの引数に入れたテキストデータをbcpで
書き込むことができるのでしょうか?
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-05-27 11:47
bcp.exeでテキストファイルからテーブルへインポートせよ ってことでは。
水谷
会議室デビュー日: 2004/05/07
投稿数: 17
お住まい・勤務地: 福島県
投稿日時: 2005-05-27 20:36
質問の内容としては、
・カンマ区切りのテキストデータを SQL Server に入れたい
・SQL Server のインストールされているマシンとテキストファイルのあるマシンは異なる
・VB.NET で作成したアプリケーション上で行いたい
ということでしょうか?

アプリケーションを実行するマシン上に SQL Server のクライアントツールがインストールされていれば、117さんも書かれている通り bcp.exe を使ってテキストファイルのデータをテーブルにインポートできると思います。
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)