sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:detener o interrumpir la ejecución de un script SQL

El método raiserror

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

Esto finalizará la conexión, deteniendo así la ejecución del resto del script.

Tenga en cuenta que tanto el nivel de gravedad 20 o superior como el WITH LOG son necesarias para que funcione de esta manera.

Esto incluso funciona con sentencias GO, por ejemplo.

print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'

Le dará la salida:

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.

Note que 'ho' no está impreso.

ADVERTENCIAS:

  • Esto solo funciona si ha iniciado sesión como administrador (función '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 seguirá ejecutándose .
  • Cuando se invoque 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 sentencias GO es set noexec on . Esto hace que se salte el resto del script. No finaliza la conexión, pero debe activar noexec apáguelo de nuevo 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.