• 締切済み

バッチファイルからのBCP起動について

バッチファイルからBCPを実行させようとしています。実行結果をERRORLEVELで取得してもし、失敗した場合は次の処理に進むのをやめたいのですが、ERRORLEVELには正常値が返ってきます。どなたか、似たようなことをやったことのある人がいらっしゃれば、教えていただきたいです。 ちなみにSQLServer2000です。

みんなの回答

回答No.5

>内容をプログラムでチェック その通りです。 失敗したときの文言はほとんど決まっているので、それほどエラーパターンは存在しないと思います。

回答No.4

-o オプションをつけて、ログを解析する方法もあります。

yossie_rin
質問者

補足

それは、-oでbcpからのログを出力して、その内容をプログラムでチェックするということでしょうか?

noname#9100
noname#9100
回答No.3

こういう処理の場合、bcpでエラーがでないようなつくりにしてます。具体的にはワークテーブルを作成して、その列の型を文字列型にしておけば、まずエラーにはならないかと思います。 エラーハンドルを行うのは、このワークテーブルから実テーブルにデータを挿入するときに行ってます。

yossie_rin
質問者

お礼

ありがとうございます。なるほど。そういう方法もありますよね。

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

似たような事をしていますが、ログを吐いて、 そのログをfindstrでエラーを探してエラーを ハンドリングしています。 納得行きませんけど。

yossie_rin
質問者

補足

他に方法がなければ、私もその方法をとるつもりですが、やっぱり納得いきませんよねぇ。。

  • ramuta
  • ベストアンサー率32% (74/227)
回答No.1

BCPで無くてはいけないのですか? SQLServer2000の他の機能では目的を果たせないの でしょうか?

yossie_rin
質問者

補足

DTSを使うという方法もありますが、それだと変換元ファイルの場所が固定になってしまいます。違うフォルダにあるデータを取り込みたいとき、DTSにすると定義をやり直す必要が出てきます。(変換元ファイルが固定長テキストなので、定義が大変。。)その点、BCPだとコマンドラインからファイル名を渡せるのでBCPでデータの取込を行いたいと思っています。

関連するQ&A

  • バッチファイルを使ったテーブルのエクスポート

    いつもお世話になっております。 現在、WindowsXP(SP2)、SQLServer2000(SP4)で開発をしています。 コマンドプロンプトで下記のコマンドを実行すると、テーブルのエクスポートが正常に行われます。 bcp [データベース名].[dbo].[テーブル名] out c:\test.txt /c /t , /r \n /P (パスワード) このコマンドをバッチファイルに書いて、バッチファイルを実行する事でテーブルのエクスポート処理を行いたいのですが、書き方がわかりません。 御存知の方がいましたら、ヒントや参考にするHP等でも構いませんので、教えてください。 宜しくお願いします。

  • bcpで抽出した結果をエクセルに保存できませんか

    バッチ処理で、bcpを使ってSQLの実行を行っています。この実行結果(データ抽出)をエクセルに保存させることは出来ませんでしょうか。 ネットでエクセルに保存させる方法がないかいろいろ探してみましたが、探し方が悪いのか方法を探し出すことが出来ませんでした。 最終的には、毎日エクセルファイルにデータを吐き出すことが出来るようにしたいです。

  • windowsXPでのバッチファイル作成について

    windowsXPでのバッチファイル作成について質問させてください。ネットワーク機器の疎通確認をするよう以下を以下を作成しました。 <bat1> for /L %%i in (1,1,254) do ( ping -w 50 -n 1 192.168.1.%%i echo 192.168.1.%%i %errorlevel% ) 結果、正常応答とタイムアウトする機器があるのですが、errorlevelが全て0で返ってきてしまいます。 しかし・・・ <bat2> ping -w 50 -n 1 192.168.1.1 echo 192.168.1.1 %errorlevel% とした場合、タイムアウトした場合errorlevelは期待どおり1となります。これはなぜでしょうか。bat1の記述がおかしいのでしょうか。 また、本来はerrorlevelではなくタイムアウトやルータからのエラーなど、応答によって後の処理やエラー画面を変えたいのですが、どのように作るのが良いでしょうか。素人質問で申し訳ありませんが、よろしくお願い致します。

  • バッチファイル 戻り値

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- @ECHO ON set bat_name="ABC.bat" call DEF.bat echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 "ABC.bat"------------------------------------------------- 上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。 "DEF.bat"------------------------------------------------- @ECHO ON set bat_name="DEF.bat" exit /b 10 "DEF.bat"------------------------------------------------- 実行結果は予想していたものと違っていました。 予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。 実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】 %ERRORLEVEL%のみを取得したかったのですが DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。 bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが 制御は難しいでしょうか? echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に 再度 set bat_name="ABC.bat" と記述しなければダメでしょうか? 尚、都合上、ECHO文と変数名は変えたくありません。 もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • バッチファイルについて

    バッチファイル(.bat)について不明な点が ありますので、詳しく方ご教授お願い致します。 コマンドプロンプトを開き、対象のバッチファイルを ドラッグアンドドロップし、実行すると正常通りの結果が 得られました。 ただ、バッチファイルをダブルクリックし、実行すると 実行されません。 原因を詳しい方、ご教授お願い致します。

  • バッチファイルを1個だけしか起動しないようにしたい

    エクスプローラー上から バッチファイル(test.bat)を ダブルクリックしてバッチファイルを実行しています。 通常はコマンドプロンプトが1個だけ表示されて、 バッチファイルが実行して実行が終了すると コマンドプロンプトも閉じられます。 しかし、時々、 コマンドプロンプトが2個表示されることがあります。 つまり、ダブルクリックが、 1回ではなく2回実行されたと誤認識されて、 同じバッチファイル(test.bat)が 2つ起動してしまったと思われます。 当然、その後の処理はおかしくなります。 (バッチファイル(test.bat)の中に 何らかのコードを追加するなどして) 必ず1個だけしか起動しないようにすることは、 できないでしょうか。 (Windows10)

  • BCPコマンドのcmdファイルを複数行う・・・

    お世話になります。 只今、以下の環境でシステム構築を行っています。 OS:Windows2003Server DB:SQLServer2000(SP4) そこでBCPコマンドを使用して複数のテーブルのデータを出力する為にテーブル分のBCPコマンドを記述したcmdファイルを用意して実行してみた所・・・ C:\>bcp * out *.dat -S * -U * -P * -c -t * -r * C:\>bcp * out *.dat -S * -U * -P * -c -t * -r * C:\>bcp * out *.dat -S * -U * -P * -c -t * -r *   ・   ・   ・ ※「*」はテーブル名、サーバー名など ・・・と一行目のコマンドが繰り返し表示され実行されてずに無限に繰り返す状態に陥ってしまいました。 cmdファイルを使用せずに1テーブルのbcpコマンドだけを実行すると正常に終了します。 また1度上記の現象に陥ってしまうと今まで動いていたcmd(複数bcpコマンドが記述)を実行しているのにも関わらず失敗したcmdのbcpコマンドが繰り返し表示される状態になってしまいました。 自PCもDBも再起動しましたが直りませんでした。 原因が不明なので非常に困っています。 なんらかの解決方法や情報を頂ければ幸いです。 よろしくお願い致します。

  • バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。

    バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。 バッチファイルでほかのバッチファイルを呼び出した後の処理で困っています。 どうぞ教えてください。 「A.bat」というバッチファイルを実行すると、「1.bat」というバッチファイルを 実行させ、「1.bat」の実行結果によって、処理を分岐させたいと考えています。 「1.bat」をcallで呼び出し、実行はできたのですが、「1.bat」は最後にエンタキーを 押さないと終了しないようになっています。そのため、「エンターキーを押して終了させて ください」というメッセージが出たままの画面で終わってしまい、「A.bat」に帰ってくることが できません。 「1.bat」は中身を扱えないようにしてあるバッチファイルなので、こちらでエンターキーを 押さずに終了させるようにはできません。何かいい方法はないでしょうか?

  • バッチファイルの同時起動を防ぎたい

    現在バッチファイルを二つ(A,B)作っております。 Aというバッチファイルを実行し完了するまで、Bというバッチファイルを実行させないようにしたいです。(逆も同様に) バッチの処理完了時間はA,B共に15秒~30秒程です。 いろいろと調べてみたのですがバッチの最初にロックファイルを作成し、実現しようかと思っています。(バッチ終了時にはロックファイルを消す処理も入れます。) また、ロックファイルを作成した後に意図せずwindowsが落ちた場合、ロックファイルが削除されず、ロックされたままになってしまう可能性もあると知りました。この場合ファイルのタイムスタンプを作成し、ロックファイルの更新日時と現在時刻の差分が1分以上ならば異常な処理があったとみなし、ロックファイルを削除をしようと考えています。 ここで質問なのですが、ロックファイルの作成はできたのですが、更新日時と現在時刻の差分をバッチで記述する方法がわかりません。調べはしたのですが、いまいちよくわからず。 どなたか、サイトまたはソースをご教授願います。 環境はwindows10です。