Metoda raiserror
raiserror('Oh no a fatal error', 20, -1) with log
Tím se ukončí připojení, čímž se zastaví běh zbytku skriptu.
Všimněte si, že jak úroveň závažnosti 20 nebo vyšší, tak WITH LOG
aby to fungovalo tímto způsobem.
To dokonce funguje s příkazy GO, např.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Poskytne vám výstup:
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.
Všimněte si, že „ho“ není vytištěno.
UPOZORNĚNÍ:
- Toto funguje pouze v případě, že jste přihlášeni jako správce (role 'sysadmin') a také nemáte žádné připojení k databázi.
- Pokud NEJSTE přihlášeni jako správce, samotné volání RAISEERROR() se nezdaří a skript bude pokračovat ve vykonávání .
- Při vyvolání pomocí sqlcmd.exe bude hlášen návratový kód 2745.
Odkaz:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Metoda noexec
Další metodou, která pracuje s příkazy GO, je set noexec on
. To způsobí, že zbytek skriptu bude přeskočen. Neukončí to připojení, ale musíte zapnout noexec
znovu vypnout před provedením jakýchkoli příkazů.
Příklad:
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.