SQL Server 2005 nieuw intoduced de weg naar terugdraaien van de transacties in SQL Server 2005
SET XACT_ABORT ON
wanneer XACT_ABORT is op. De T-SQL statements automatisch terugdraaien van de transactie wanneer er een fout opgetreden in verklaringen.
SET XACT_ABORT ON
GEBRUIK Emp
Begin Tran
Invoegen in EmpInfo Values(1)
Invoegen in EmpInfo Values(1) — Deze verklaring zal verhogen de primaire sleutel fout
Invoegen in EmpInfo Values(2)
Commit Tran
De eerste regel van instructie zal worden uitgevoerd zonder fouten. De primaire sleutel fout zal verhogen in de tweede lijn. Maar het hele blok transactie zal niet worden gepleegd, omdat de XACT_ABORT in op.
U moet er rekening mee dat XACT_ABORT de huidige batch * * eindigt, niet de gehele opdracht. Partijen worden gescheiden door de GO trefwoord. Uitvoering zal blijven aan het begin van de volgende batch.
Deze functie is ook in SQL Server 2000, hoewel het gedraagt zich iets anders voor verschillende fouten.
In SQL 2000, Er zijn gevallen waarin XACT_ABORT niet terugdraaien van de transactie automatisch.
Bijvoorbeeld:
Invoegen in een ongeldige kolomnaam.
Het plaatsen van een primaire sleutel met IDENTITY_INSERT OFF.
Het uitvoeren van een SELECT dat een niet-bestaande UDF gebruikt.
Dit soort fouten worden meestal veroorzaakt door een slecht geschreven commando, zodat ze niet voorkomen in de dag-tot-dag werking van uw programma, tenzij iemand verandert het schema. Maar ik verantwoording afleggen voor hun mogelijkheid om bij het maken van database te updaten scripts bij het implementeren van een nieuwe versie van een project, voor het geval dat inzet gaat niet zoals gepland.
Er zijn manieren om deze fouten te behandelen. Uw COMMIT moet worden in de partij de uitvoering van de DML statements. Na de partij (na de GO trefwoord) kunt u de @ @ TRANCOUNT om te zien of het groter is dan nul en handelen. Meestal ROLLBACK van de transactie.
Transacties kunnen overspanning batches, dus je kunt uitvoeren van een rollback in een volgende batch.