Wenn der Fehler auftritt, wird die Transaktion automatisch rückgängig gemacht und der aktuelle Stapel abgebrochen.
Die Ausführung wird jedoch im nächsten Stapel fortgesetzt. Also all das Zeug in den Batches, nachdem der Fehler ausgeführt wurde. Und wenn Sie später nach Fehlern suchen, versuchen Sie, eine bereits zurückgesetzte Transaktion rückgängig zu machen.
Um das gesamte Skript und nicht nur den aktuellen Batch zu stoppen, sollten Sie außerdem Folgendes verwenden:
raiserror('Error description here', 20, -1) with log
Siehe meine Antwort hier für Details dazu.
Sie müssen also nach @error
suchen Ich denke, nach jedem Stapel sollte so etwas funktionieren:
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