レイザー方式
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'は印刷されないことに注意してください。
警告:
- これは、管理者('sysadmin'ロール)としてログインしている場合にのみ機能し、データベース接続もありません。
- adminとしてログインしていない場合、RAISEERROR()呼び出し自体は失敗し、スクリプトは実行を継続します 。
- sqlcmd.exeを使用して呼び出すと、終了コード2745が報告されます。
参照:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
noexecメソッド
GOステートメントで機能するもう1つの方法は、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.