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は次の処理にいっちゃうんですよね。