Co robi SAVE TRANSACTION w TSQL?

7-sty-2011

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.

Komentarze są wyłączone

Autor: Rafał Kraik