RAISERROR Sposób
raiserror('Oh no a fatal error', 20, -1) with log
Spowoduje to zakończenie połączenia, a tym samym zatrzymanie pozostałej części skryptu.
Należy pamiętać, że zarówno poziom ważności 20 lub wyższy, jak i WITH LOG
opcja są konieczne, aby działał w ten sposób.
Działa to nawet z instrukcjami GO, np.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Otrzymasz wynik:
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.
Zauważ, że napis „ho” nie jest drukowany.
UWAGI:
- Działa to tylko wtedy, gdy jesteś zalogowany jako administrator (rola „sysadmin”) i nie pozostawia Cię bez połączenia z bazą danych.
- Jeśli NIE jesteś zalogowany jako administrator, samo wywołanie RAISEERROR () zakończy się niepowodzeniem i skrypt będzie kontynuował działanie .
- W przypadku wywołania za pomocą narzędzia sqlcmd.exe zostanie zgłoszony kod wyjścia 2745.
Odniesienie: http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Metoda noexec
Inną metodą, która działa z instrukcjami GO, jest set noexec on
. Powoduje to pominięcie reszty skryptu. Nie powoduje to zakończenia połączenia, ale należy je noexec
ponownie wyłączyć przed wykonaniem jakichkolwiek poleceń.
Przykład:
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.