La méthode raiserror
raiserror('Oh no a fatal error', 20, -1) with log
Cela mettra fin à la connexion, arrêtant ainsi le reste du script de s'exécuter.
Notez que le niveau de gravité 20 ou supérieur et l' WITH LOG
option sont nécessaires pour que cela fonctionne de cette façon.
Cela fonctionne même avec les instructions GO, par exemple.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Vous donnera la sortie:
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 RAISEERROR () lui-même échouera et le script continuera de s'exécuter .
- Lorsqu'il est appelé avec sqlcmd.exe, le code de sortie 2745 sera 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 instructions GO est set noexec on
. Cela provoque le reste du script à ignorer. Il ne met pas fin à la connexion, mais vous devez la noexec
désactiver à nouveau avant l'exécution de toute commande.
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.