CSVを取込むストアドプロシージャで、1件目が登録されない現象が起きています
いつもお世話になっております
古い環境なので大変恐縮ですが、行き詰ってしまったので、
ご教示いただきたいと思います。
環境: WinXP sp2
SQLServer8.0
VB6.0 sp4
VBでCSVのデータ1行について、ストアドプロシージャにて3つのテーブルに格納しようとしています。
トランザクションの管理はVB側で行っています。
1行ごとにCommitを行えば、全行格納されるのですが、
2行以上ごとにCommitを行うと、最初の1行のみが格納されないという現象がおきています。
6800行存在する同じCSVファイルについて、1行ごとにCommitを行った場合は、6800件登録されるのに
処理の最後でCommitをきった場合、6799行しか登録されません。
1行ごとにCommitをきった場合に6800行登録されるので、キー重複は考えられません。
いろいろ試してみたことを下記に書きます
結果はこのような感じです。
CASE1・・・全件登録できます
CASE2・・・2件目で重複エラーが発生します
CASE3・・・全件 - 1件が登録できます
CASE4・・・全件登録できます
CASE5・・・全件登録できます
CASE2, CASE3 で全件登録できない理由をご教示いただきたく思います。
よろしくお願いいたします。
CASE1(VBでINSERT文を記述)
localConnection.beginTrans
localConnection.execute "DELETE FROM TABLE_A"
localConnection.execute "DELETE FROM TABLE_B"
localConnection.execute "DELETE FROM TABLE_C"
FOR i = 1 to 6800
localConnection.execute "INSERT INTO TABLE_A (COL_A1, COL_A2) VALUES ('" & VAL_A1(i) & "','" & VAL_A2(i) & "')"
localConnection.execute "INSERT INTO TABLE_B (COL_B1, COL_B2) VALUES ('" & VAL_A1(i) & "','" & VAL_B2(i) & "')"
localConnection.execute "INSERT INTO TABLE_C (COL_C1, COL_C2) VALUES ('" & VAL_A1(i) & "','" & VAL_C2(i) & "')"
NEXT
localConnection.commitTrans
CASE2(ストアドプロシージャ)
localConnection.beginTrans
localConnection.execute "DELETE FROM TABLE_A"
localConnection.execute "DELETE FROM TABLE_B"
localConnection.execute "DELETE FROM TABLE_C"
' -- ストアドプロシージャのパラメータ作成
FOR i = 1 to 6800
localConnection.execute
NEXT
localConnection.commitTrans
CASE3(ストアドプロシージャ)
localConnection.beginTrans
localConnection.execute "DELETE FROM TABLE_A"
localConnection.execute "DELETE FROM TABLE_B"
localConnection.execute "DELETE FROM TABLE_C"
localConnection.commitTrans
' -- ストアドプロシージャのパラメータ作成
localConnection.beginTrans
FOR i = 1 to 6800
localConnection.execute
NEXT
localConnection.commitTrans
CASE4(ストアドプロシージャ)
localConnection.beginTrans
localConnection.execute "DELETE FROM TABLE_A"
localConnection.execute "DELETE FROM TABLE_B"
localConnection.execute "DELETE FROM TABLE_C"
localConnection.commitTrans
' -- ストアドプロシージャのパラメータ作成
localConnection.beginTrans
FOR i = 1 to 6800
localConnection.execute
localConnection.commitTrans
localConnection.beginTrans
NEXT
localConnection.commitTrans
CASE5(ストアドプロシージャ)
localConnection.beginTrans
localConnection.execute "DELETE FROM TABLE_A"
localConnection.execute "DELETE FROM TABLE_B"
localConnection.execute "DELETE FROM TABLE_C"
localConnection.commitTrans
' -- ストアドプロシージャのパラメータ作成
localConnection.beginTrans
FOR i = 1 to 6800
localConnection.execute
if i = 1 then
localConnection.commitTrans
localConnection.beginTrans
end if
NEXT
localConnection.commitTrans
補足
解決できました ありがとうございます。