Raiserror-metoden
raiserror('Oh no a fatal error', 20, -1) with log
Dette vil afbryde forbindelsen, og derved stoppe resten af scriptet i at køre.
Bemærk, at både sværhedsgrad 20 eller højere og WITH LOG
er nødvendige for at det kan fungere på denne måde.
Dette virker endda med GO-sætninger, f.eks.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Vil give dig outputtet:
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.
Bemærk, at 'ho' ikke udskrives.
ADVARSLER:
- Dette virker kun, hvis du er logget ind som admin ('sysadmin'-rolle), og efterlader dig også uden databaseforbindelse.
- Hvis du IKKE er logget ind som admin, vil selve RAISEERROR()-kaldet mislykkes og scriptet vil fortsætte med at udføre .
- Når den aktiveres med sqlcmd.exe, vil afgangskode 2745 blive rapporteret.
Reference:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
noexec-metoden
En anden metode, der virker med GO-sætninger, er set noexec on
. Dette medfører, at resten af scriptet springes over. Det afslutter ikke forbindelsen, men du skal slå noexec
slukket igen, før nogen kommandoer udføres.
Eksempel:
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.