El método raiserror
raiserror('Oh no a fatal error', 20, -1) with log
Esto terminará la conexión, lo que detendrá la ejecución del resto del script.
Tenga en cuenta que tanto el nivel de gravedad 20 o superior como la WITH LOGopción son necesarios para que funcione de esta manera.
Esto incluso funciona con declaraciones GO, por ejemplo.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Te dará el resultado:
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.
Tenga en cuenta que 'ho' no se imprime.
CUEVAS
- Esto solo funciona si ha iniciado sesión como administrador (rol 'sysadmin') y también lo deja sin conexión a la base de datos.
- Si NO ha iniciado sesión como administrador, la llamada RAISEERROR () fallará y el script continuará ejecutándose .
- Cuando se invoca con sqlcmd.exe, se informará el código de salida 2745.
Referencia: http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
El método noexec
Otro método que funciona con las declaraciones GO es set noexec on. Esto hace que se omita el resto del script. No termina la conexión, pero debe noexecapagarse nuevamente antes de que se ejecute cualquier comando.
Ejemplo:
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.