En 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
sind notwendig, damit es auf diese Weise funktioniert.
Dies funktioniert sogar mit GO-Anweisungen, z. B.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Sie erhalten die Ausgabe:
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 führt auch dazu, dass 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 Aufruf 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
( docs ). Dies führt dazu, dass der Rest des Skripts übersprungen wird. Die Verbindung wird dadurch nicht abgebrochen, aber Sie müssen die noexec
wieder aus, bevor Befehle ausgeführt werden können.
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.