sql >> Database >  >> RDS >> Sqlserver

SQL Server - stop of verbreek de uitvoering van een SQL-script

De raiserror-methode

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

Hierdoor wordt de verbinding verbroken, waardoor de rest van het script niet meer wordt uitgevoerd.

Merk op dat zowel ernstniveau 20 of hoger als de WITH LOG optie zijn nodig om op deze manier te werken.

Dit werkt zelfs met GO-verklaringen, bijv.

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

Zal je de output geven:

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.

Merk op dat 'ho' niet wordt afgedrukt.

WAARSCHUWINGEN:

  • Dit werkt alleen als je bent ingelogd als beheerder ('sysadmin'-rol), en je hebt ook geen databaseverbinding.
  • Als u NIET bent aangemeld als beheerder, zal de aanroep van RAISEERROR() zelf mislukken en zal het script doorgaan met uitvoeren .
  • Wanneer aangeroepen met sqlcmd.exe, wordt afsluitcode 2745 gerapporteerd.

Referentie:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334

De noexec-methode

Een andere methode die werkt met GO-statements is set noexec on . Hierdoor wordt de rest van het script overgeslagen. Het verbreekt de verbinding niet, maar u moet noexec . aanzetten weer uit voordat er opdrachten worden uitgevoerd.

Voorbeeld:

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. Einde van ondersteuning voor SQL Server 2008 &2008 R2

  2. Hoe maak je een tabel met meerdere buitenlandse sleutels en raak je niet in de war?

  3. Kunt u binnen één instructie toegang krijgen tot de waarde voor automatisch verhogen in MySQL?

  4. Zet decimale tijd om in uren en minuten