mssqlテーブルに対する更新追加処理


bugsy  2004-06-23 02:26:43  No: 84157  IP: [192.*.*.*]

[VBのVER]:6
mssql7

こんばんは、お世話になっております

定期的にテキストファイルの項目をmssqlのテーブルに流す必要があります
addnewかinsertかという点は過去ログより参照いたしましたが

テキストデータの一部をキーレコードとして取得し
テーブルに対して「存在する」か「存在しない」かを確認して
存在するならupdate処理、しないならinsert処理
これよくありますよね。

これを実装するには
(1)vb上で、select count(*)の結果をみて、update文、insert文を出力
(2)sqlサーバー上のストアドでカーソルを作成してvbから変数を渡すのがよいか
(3)sqlサーバー上のストアドでupdate文とinsert文を作成しvbから変数渡し
そのほか、よい方法を教えて頂きたいのです。

また、存在確認は、いずれ場合でも、select count(*)が一番効率いいのでしょうか

条件的には、できるだけ行ロックを起こしたくないことと
vbは連続起動のマシンで定期的に処理するのでメモリ処理が確実な方法ってところです。(それでもリセットは覚悟してます)
速度はそれほど重要ではないです。
よろしくお願いいたします

編集 削除
S.S  2004-06-23 09:17:55  No: 84158  IP: [192.*.*.*]

私ならSQLでIf文を使用してデータ存在の有無を確認しますね。
確かにVBからデータの存在を確認し、処理を分岐するっていう方法は
コードが長くなりますし、データの存在有無からのストアドならば、
常に同じパラメータですので、他の人が見ても見やすいのではないかと
思っています。
現在もこの方法で書いています(^^

編集 削除
bugsy  2004-06-23 18:24:06  No: 84159  IP: [192.*.*.*]

s.s.様レスありがとうございます。
さらに踏み込みますと
元となるデータは、テキストファイルです。
テキストからのレコード取得は、vb内で行うとして、

全テキストファイルを、sql内の一時テーブルに一括挿入して
一時テーブルと、本テーブル間で、
update 本テーブル,,where 一時=本
insert into 本,,,,where,,,not in,,,の2行を使う方法と

vb内で、テキストファイルを1レコードづつ順番に読んで
1レコードづつをsqlに送る。
sqlでは、カーソルを使い、1レコードごとに
あるなしを、チェックする。

どちらの方法がより効率がよいでしょうか

編集 削除
S.S  2004-06-24 09:14:17  No: 84160  IP: [192.*.*.*]

発行するSQL文の数だけで比較すると一括で行った方が良さそうですね(^^
お時間に余裕があるのであれば、両方作成し、レスポンスとCPU・メモリの使用率を測定されてはいかがでしょうか?

編集 削除