Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:interrompe o interrompe l'esecuzione di uno script SQL

Il metodo raiserror

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

Ciò interromperà la connessione, interrompendo così l'esecuzione del resto dello script.

Tieni presente che sia il livello di gravità 20 o superiore sia il WITH LOG sono necessarie per farlo funzionare in questo modo.

Funziona anche con le istruzioni GO, ad es.

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

Ti darà l'output:

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.

Nota che 'ho' non viene stampato.

AVVERTENZE:

  • Funziona solo se hai effettuato l'accesso come amministratore (ruolo 'sysadmin') e ti lascia anche senza connessione al database.
  • Se NON sei loggato come amministratore, la stessa chiamata RAISEERROR() fallirà e lo script continuerà a essere eseguito .
  • Quando viene richiamato con sqlcmd.exe, verrà segnalato il codice di uscita 2745.

Riferimento:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334

Il metodo noexec

Un altro metodo che funziona con le istruzioni GO è set noexec on . Ciò fa sì che il resto dello script venga saltato. Non interrompe la connessione, ma devi attivare noexec di nuovo prima che qualsiasi comando venga eseguito.

Esempio:

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.