Die Raiserror- Methode
raiserror('Oh no a fatal error', 20, -1) with log
Dadurch wird die Verbindung beendet und der Rest des Skripts wird nicht mehr ausgeführt.
Beachten Sie, dass sowohl der Schweregrad 20 oder höher als auch die WITH LOG
Option erforderlich sind, damit dies funktioniert.
Dies funktioniert sogar mit GO-Anweisungen, z.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Wird Ihnen die Ausgabe geben:
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.
Beachten Sie, dass 'ho' nicht gedruckt wird.
CAVEATS:
- Dies funktioniert nur, wenn Sie als Administrator ('sysadmin'-Rolle) angemeldet sind und Sie keine Datenbankverbindung haben.
- Wenn Sie NICHT als Administrator angemeldet sind, schlägt der Aufruf von RAISEERROR () selbst fehl und das Skript wird weiter ausgeführt .
- Beim Aufrufen mit sqlcmd.exe wird der Exit-Code 2745 gemeldet.
Referenz: http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Die noexec-Methode
Eine andere Methode, die mit GO-Anweisungen funktioniert, ist set noexec on
. Dadurch wird der Rest des Skripts übersprungen. Die Verbindung wird nicht beendet, Sie müssen noexec
sie jedoch erneut ausschalten, bevor Befehle ausgeführt werden.
Beispiel:
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.