Le site raiserror méthode
raiserror('Oh no a fatal error', 20, -1) with log
Cela mettra fin à la connexion, arrêtant ainsi l'exécution du reste du script.
Notez que le niveau de sévérité 20 ou plus et l'option WITH LOG
sont nécessaires pour qu'il fonctionne de cette manière.
Cela fonctionne même avec les déclarations GO, par exemple.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Vous obtiendrez le résultat :
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.
Notez que "ho" n'est pas imprimé.
CAVEATS :
- Cela ne fonctionne que si vous êtes connecté en tant qu'administrateur (rôle 'sysadmin'), et vous laisse également sans connexion à la base de données.
- Si vous n'êtes PAS connecté en tant qu'administrateur, l'appel de RAISEERROR() lui-même échouera. et le script continuera à s'exécuter .
- Lorsqu'il est invoqué avec sqlcmd.exe, le code de sortie 2745 est signalé.
Référence : http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
La méthode noexec
Une autre méthode qui fonctionne avec les déclarations GO est set noexec on
. Cela fait sauter le reste du script. Cela ne met pas fin à la connexion, mais vous devez transformer la commande noexec
avant que toute commande ne soit exécutée.
Exemple :
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.