W TSQL isnieje komenda
SAVE TRANSACTION <transaction_name>Możesz użyć tego polecenia wewnątrz transakcji, aby zapisywać tzw. bezpieczny punkt transakcji. Jeżeli wewnątrz transakcji, która może przecież być dość złożona logicznie, w pewnym momencie zechcesz wycofać blok ostatnio wykonanych czynności (ale nie całą transakcę), wystarczy przed tymi czynnościami zapisać transakcję. Transakcje można zapisywać wielokrotnie podczas trwania transakcji, a potem powracać do określonych punktów.
Do zapisanych punktów transakcji można powrócić za pomocą polecenia:
ROLLBACK TRANSACTION <transaction_name>Przyjrzyjmy się następującemu przykładowi:
–Przygotowanie do testu CREATE DATABASE Tests;GO
USE Tests;
GO
CREATE TABLE test_a
(id INT);
GO
–sprawdzenie ile transakcji jest teraz otwartych
SELECT @@Trancount;
–wynik 0
–Rozpoczecie transakcji
BEGIN TRANSACTION
–Sprawdzenie ile transakcji jest teraz otwartych
SELECT @@Trancount
–wynik 1
–wstawienie rekordu 1 do tabeli
INSERT Test_a values(1)
SELECT * FROM Test_a
–rekord zostal wstawiony
–zapisanie transakcji pod nazwa a1
SAVE TRANSACTION a1
–Sprawdzenie ile transakcji jest teraz otwartych
SELECT @@Trancount
–Nadal 1
–wstawienie rekordu 2 do tabeli
INSERT Test_a values(2)
SELECT * FROM Test_a
–rekord zostal wstawiony
–powrot do zapisanego punktu transakcji a1
ROLLBACK TRANSACTION a1
–sprawdzenie co znajduje sie obecnie w tabeli
SELECT * FROM Test_a
–wynik – tylko 1 rekord
–zakonczenie transakcji
COMMIT TRANSACTION
–sprawdzenie co zostawila transakcja
SELECT * FROM Test_a
–tylko jeden (pierwszy rekord)
Widać, że po powrocie do punktu a1 (za pomocą polecenia ROLLBACK TRANSACTION a1) wszystkie zmiany zapisane po operacji „SAVE TRANSACTION a1” zostały utracone. Oczywiście w praktycznych zastosowaniach ROLLBACK TRANSACTION a1 zostanie wykonany pod pewnym warunkiem (np. stwierdzenie błędu).
Co ciekawe pod jedną nazwą można zapisać wiele punktów transakcji, ale wtedy polecenie ROLLBACK powróci do ostatniej z nich.