sql >> Databáze >  >> RDS >> Sqlserver

Ukončete a vraťte vše ve skriptu při chybě

Když dojde k chybě, transakce se automaticky vrátí zpět a aktuální dávka se přeruší.

Provádění však pokračuje do další dávky. Takže všechny věci v dávkách po provedení chyby. A když později zkontrolujete chyby, pokusíte se vrátit zpět již odvolanou transakci.

Chcete-li zastavit celý skript, nejen aktuální dávku, měli byste použít:

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

Viz moje odpověď zde podrobnosti o tom.

Musíte tedy zkontrolovat @error po každé dávce by podle mě mělo fungovat něco takového:

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. Jak odstranit databázi v MySQL/MariaDB

  2. MySQL FIND_IN_SET() nefunguje podle očekávání

  3. C# Parametrizovaný dotaz MySQL s klauzulí `in`

  4. Jak získat řádek s nejlépe placeným zaměstnancem