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.
Si noti che sia il livello di gravità 20 o superiore e l' WITH LOG
opzione sono necessari affinché funzioni in questo modo.
Funziona anche con le dichiarazioni 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.
Notare che 'ho' non è stampato.
Avvertenze:
- Funziona solo se si è effettuato l'accesso come admin (ruolo 'sysadmin') e non si ha alcuna connessione al database.
- Se NON si è effettuato l'accesso come amministratore, la chiamata RAISEERROR () stessa non riuscirà e lo script continuerà l'esecuzione .
- Quando viene richiamato con sqlcmd.exe, verrà segnalato il codice di uscita 2745.
Riferimento: http://www.mydatabaseupport.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
. Questo fa sì che il resto dello script venga ignorato. Non interrompe la connessione, ma è necessario noexec
disattivare nuovamente prima di eseguire qualsiasi comando.
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.