VISUAL BASIC 2008のプログラムでSQL SERVER 2008を使用。
プログラムの大まかな流れとしては、
1.テーブルのTRUNCATE(SQL実行)
2.TRUNCATEしたテーブルにデータをインポート(BCPコマンド使用)
3.ストアドプロシージャを実行して、データをインポートした
テーブルを更新用データとして、他のテーブルのデータを更新する。
というシンプルな造りなのですが、これがいっくらやっても
更新結果ゼロ件となります。
しかしテーブルを見た限りではデータは入ってるしな・・・
ストアドを呼んでないのかとか考えましたが、
ログはしっかり出ているので、それも考えにくい。
VBも初めてだったので、書き方がおかしくないか色々調べまくりました。
結局調査で2日くらいかかりました。
で、結果わかったのが、
ストアドを実行する前にBCPコマンドが終了してないのでは?ということ。
ためしにBCPコマンド実行後、5秒くらい待つ関数を作って
実行させてみたらビンゴ。
しゃあないので、実行結果を監視する関数
(5秒おきにSELECT文を実行して、件数を取得。ゼロ件だったら
再度5秒後にSELECT文実行、ゼロ件より大きければループを抜ける。
ちなみに任意の時間を過ぎたらタイムアウトとしてメッセージ出力し
処理を終了させる)
なんてのを作って対処しました。
よく考えたらBCPコマンドって外部でDOSで動くコマンドだから
コマンド発行したら、はいおしまい、ってことでVBは次の処理にいっちゃうんですよね。

