sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server - stop eller bryd udførelse af et SQL-script

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.


  1. Alternative Oracle-drivere til .net

  2. Er der et præstationshit ved hjælp af decimaldatatyper (MySQL / Postgres)

  3. Hvad er forskellen mellem pg_table_size, pg_relation_size og pg_total_relation_size? (PostgreSQL)

  4. Hvordan kan jeg fremskynde en MySQL-forespørgsel med en stor offset i LIMIT-klausulen?