SQL Server - SQL スクリプトの実行を停止または中断する 質問する

SQL Server - SQL スクリプトの実行を停止または中断する 質問する

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

挿入を開始する前に検証と検索を実行するスクリプトがあり、検証または検索のいずれかが失敗した場合はスクリプトを停止したいと考えています。

ベストアンサー1

レイザーエラー方法

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

これにより接続が終了し、スクリプトの残りの部分の実行が停止します。

WITH LOGこの方法で動作させるには、重大度レベル 20 以上とオプションの両方が必要であることに注意してください。

これは 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」が印刷されていないことに注意してください。

注意事項:

  • これは、管理者 (「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.

おすすめ記事