こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

バッチでの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です。
初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。
よろしくお願いいたします。

投稿日時 - 2010-04-30 10:28:14

QNo.5861422

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

23人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

投稿日時 - 2010-05-02 09:02:13

ANo.2

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

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

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

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

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

投稿日時 - 2010-04-30 16:01:25

ANo.1

こんにちは

SQLの実行結果を取得する場合、ストアドを作成するのが一般的だと思います。

投稿日時 - 2010-04-30 14:42:16