1. ホーム
  2. sql

[解決済み] SQL Server - SQLスクリプトの実行を停止または中断する

2022-03-15 06:40:41

質問

SQLサーバーのSQLスクリプトの実行を、"break"や"exit"コマンドのようにすぐに停止する方法はありませんか?

挿入を開始する前に、いくつかの検証とルックアップを行うスクリプトがありますが、検証やルックアップのいずれかに失敗した場合に停止させたいのです。

どのように解決するのですか?

その レイザーラー メソッド

raiserror('Oh no a fatal error', 20, -1) with log

これは接続を終了させ、残りのスクリプトの実行を停止させます。

重要度レベル20以上と WITH LOG オプションが必要です。

これは、例えばGOステートメントでも機能します。

print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'

が出力されます。

hi
Msg 2745, Level 16, State 2, Line 1
Process ID 51 has raised user error 50000, severity 20. SQL Server is terminating this process.
Msg 50000, Level 20, State 1, Line 1
Oh no a fatal error
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.

ho'が印刷されないことに注意してください。

CAVEATS

  • これは管理者('sysadmin'ロール)としてログインしている場合にのみ機能し、またデータベース接続もないままになります。
  • 管理者としてログインしていない場合、RAISEERROR() の呼び出し自体が失敗します。 を実行し、スクリプトの実行を継続します。 .
  • sqlcmd.exeで起動した場合、終了コード2745が報告されます。

参考にしてください。 http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334

noexecメソッド

GOステートメントで動作するもう一つの方法は set noexec on . これにより、スクリプトの残りの部分がスキップされます。これは接続を終了させるわけではありません。 noexec を再度オフにしてから、コマンドを実行します。

print 'hi'
go

print 'Fatal error, script will not continue!'
set noexec on

print 'ho'
go

-- last line of the script
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able 
               -- to run this script again in the same session.