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

Afslut og forny alt i scriptet ved fejl

Når fejlen opstår, rulles transaktionen automatisk tilbage, og den aktuelle batch afbrydes.

Udførelsen fortsætter dog i næste batch. Så alle tingene i batchene efter fejlen bliver udført. Og så når du tjekker for fejl senere, forsøger du at rulle tilbage en allerede tilbageført transaktion.

For at stoppe hele scriptet, ikke kun den aktuelle batch, skal du bruge:

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

Se mit svar her for detaljer om den.

Så du skal tjekke efter @error efter hver batch tror jeg, at noget som dette burde virke:

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. Forståelse af MyISAM-poststruktur

  2. Rails-udvikling - Kan ikke oprette forbindelse til MySQL-server på 'localhost' (10061)

  3. Hvordan kan jeg konfigurere stien til heroku postgresql app?

  4. Bruges QSql::Out og QSql::InOut uden for opkald til en butiksprocedure?