sql >> Database >  >> RDS >> Sqlserver

Afsluiten en alles terugdraaien in script bij fout

Wanneer de fout optreedt, wordt de transactie automatisch teruggedraaid en wordt de huidige batch afgebroken.

De uitvoering gaat echter door in de volgende batch. Dus alle dingen in de batches nadat de fout is uitgevoerd. En als u later op fouten controleert, probeert u een reeds teruggedraaide transactie terug te draaien.

Om het hele script te stoppen, niet alleen de huidige batch, moet je ook het volgende gebruiken:

raiserror('Error description here', 20, -1) with log

Zie mijn antwoord hier voor details hierover.

U moet dus controleren op @error na elke batch denk ik dat zoiets als dit zou moeten werken:

BEGIN TRANSACTION
GO

ALTER Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

CREATE New Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

DROP Old Stuff
GO

if @@error != 0 raiserror('Script failed', 20, -1) with log
GO

PRINT 'No Errors ... Committing changes'
COMMIT TRANSACTION


  1. ORDER BY voor valutawaarden

  2. ORA-01858 zien:er is een niet-numeriek teken gevonden waar een numeriek werd verwacht

  3. Snelle upsert SQL-server 2008 R2

  4. Syntaxis voor SQL-updatequery met inner join