• 締切
  • すぐに回答を!

バッチでのSQL実行結果の分岐処理について。

  • 質問No.5861422
  • 閲覧数2063
  • ありがとう数23
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 14% (1/7)

バッチでのSQL実行結果の分岐処理について。
お世話になっております。
バッチからsqlを実行してその結果によってそれ以降のバッチ全体の処理を停止させる方法を考えています。
手がかりがつかめずまったく先に進めないためアドバイスをいただけますでしょうか。

バッチの内容(start_del.bat)
--------------------------------------------------------
osql -i.\del.sql -o c:\wk\log.txt -S gold -E

osql -i.\create.sql -o c:\wk\log.txt -S gold -E
------------------------------------------------------------


SQLの内容(del.sql)
------------------------------------------------------------
BEGIN TRANSACTION;

DELETE FROM LDDB.dbo.test WHERE b='0';

IF @@ERROR = 0 <--エラー判定にこのコマンドを使おうと考えました
BEGIN
***********************

END
ELSE
BEGIN

**********************
END


COMMIT TRANSACTION;
------------------------------------------------------------
処理の概要:
1.バッチで最初にdel.sqlを実行します。
2.del.sqlの実行が失敗すれば、2つ目のバッチであるcreate.sqlは実行ささずに、バッチを終了させます。
*ポイントはdel.sqlの結果というのは、バッチからdel.sqlを実行できたかではなく、del.sqlの実行結果を判断するという点です。

教えていただきたいこと
・del.sqlの実行後、制御がバッチに戻ったときに、結果を確認してバッチを継続させるか終了させるかを判断させる方法はどのような仕組みを作ればいいのでしょうか。

Windows2003サーバーで、SQLServerは2005です。
初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。
よろしくお願いいたします。

回答 (全3件)

  • 回答No.3

ベストアンサー率 42% (1231/2878)

コマンドEXITを使って、@@ERRORの値を返すとか。
詳しくはosqlあるいはsqlcmdのコマンドリファレンスをご覧ください。
  • 回答No.2

ベストアンサー率 38% (115/299)

No1の方の言うとおりですね。トリガーを利用してもいいし。

BATならBATらしく使う手もあります。例えば osqlの出力を利用す手です。

osql -i.\del.sql -o c:\wk\log.txt -S gold -E > a.txt

でa.txtの内容で判断する方法。これが最も簡単ですね。標準出力とエラー出力に分けてもいいですね。それでも判断できます。

後はosqlを終わらせるexit にエラーコードが付加できればいいんですけどね。できなかったけ?
  • 回答No.1

ベストアンサー率 47% (436/922)

こんにちは

SQLの実行結果を取得する場合、ストアドを作成するのが一般的だと思います。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ