Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server - Ausführung eines SQL-Skripts stoppen oder unterbrechen

Die Raiserrr-Methode

raiserror('Oh no a fatal error', 20, -1) with log

Dadurch wird die Verbindung beendet, wodurch der Rest des Skripts nicht mehr ausgeführt wird.

Beachten Sie, dass sowohl Schweregrad 20 oder höher als auch WITH LOG Option sind notwendig, damit es auf diese Weise funktioniert.

Das funktioniert sogar mit GO-Anweisungen, zB.

print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'

Gibt Ihnen 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.

VORBEHALTE:

  • Dies funktioniert nur, wenn Sie als Admin angemeldet sind ('sysadmin'-Rolle), und lässt Sie auch ohne Datenbankverbindung.
  • 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. Es beendet die Verbindung nicht, aber Sie müssen noexec einschalten wieder aus, bevor irgendwelche 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.