RAISERROR метод
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.
Обратите внимание, что «хо» не печатается.
ПРЕДОСТЕРЕЖЕНИЯ:
- Это работает только в том случае, если вы вошли в систему как администратор (роль '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.