Es gibt tatsächlich zwei völlig unterschiedliche Ansätze….
Ich nutze diese kürzere – vielleicht etwas älter – Variante:
Begin Transaction Begin Try /*Insert/Update/…*/ End Try Begin Catch IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; End Catch IF @@TRANCOUNT > 0 COMMIT TRANSACTION; /*Das Commit ist das "End Transaction"*/
Die zweite Variante benötigt das „XACT_STATE“ und liest sich noch komplizierter und werde ich nur nutzen, wenn ich mit dem o. g. T-SQL Code nicht weiter komme. Aber beschrieben sind beide Wege von Microsoft in dem u. g. Link
Link: