Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server - arrêter ou interrompre l'exécution d'un script SQL

La méthode raiserror

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 gravité 20 ou supérieur et le 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é.

AVERTISSEMENTS :

  • 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 à s'exécuter .
  • Lorsqu'il est invoqué 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 entraîne le saut du reste du script. Cela ne met pas fin à la connexion, mais vous devez activer noexec s'éteigne à 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.