- 締切済み
バッチでの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です。 初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
コマンドEXITを使って、@@ERRORの値を返すとか。 詳しくはosqlあるいはsqlcmdのコマンドリファレンスをご覧ください。
- bakakyatap
- ベストアンサー率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 にエラーコードが付加できればいいんですけどね。できなかったけ?
- taka451213
- ベストアンサー率47% (436/922)
こんにちは SQLの実行結果を取得する場合、ストアドを作成するのが一般的だと思います。