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 LOG
opció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 noexec
apagarse 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.