Delphi - Tranzakció-kezelés az MS SQL-ben

Transact SQL 27. rész

forráskód letöltése
Az előző részben a tranzakciókkal foglalkoztunk, most pedig folytatjuk ezt a témát. Az eddigiekben szó volt róla, hogy egy tranzakciót visszagörgethetünk a kezdeti állapotba, így semmissé téve az összes változtatást, módosítást, amit a tranzakción belül elvégeztünk. De mi a helyzet akkor, ha mi nem akarjuk az összes módosítást semmissé tenni, vagyis nem a tranzakció előtti állapotba szeretnénk eljutni, hanem csak egy adott pontig. Erről lesz szó ebben a részben.
A helyzet tehát a következő: elindítjuk a tranzakciót, majd elvégzünk néhány módosítást. Valamilyen esemény bekövetkeztekor azonban vissza kell görgetnünk a tranzakciót, de nem feltétlenül a tranzakció előtti állapotba, hanem mondjuk egy adott módosítás utáni állapotba. Erre két lehetőségünk is van, melyek közül az egyik az ún. mentési pontok alkalmazásával érhetjük el, amikor is a tranzakción belül elmentjük a tranzakció aktuális állapotát, és ehhez az állapothoz bármikor visszatérhetünk.
A másik lehetőség, hogy több nevesített tranzakciót ágyazunk egybe, és tagolva a tranzakcióban elvégzendő műveleteket.
Mentési pontot a SAVE TRANSACTION utasítással hozhatunk létre. Ennek szintaxisa a következő
SAVE TRANSACTION <név>
A <név> megadása kötelező. Az utasításnak használhatjuk a rövidített változatát is (SAVE TRAN). Ezután a <név> paramétert felhasználhatjuk a ROLLBACK utasításnál.
01.sql
Létrehozunk egy TransactionTest nevű adatbázist.
02.sql
Az új adatbázisban létrehozunk egy táblát, benne négy mezővel és néhány rekorddal.
03_BEGIN_TRAN.sql
Ezzel a script-tel indíthatunk el egy új tranzakciót. A tranzakciónak nem adunk nevet, így akár több tranzakciót is indíthatunk egymásba ágyazva, azonban ne felejtsük el, hogy minden elindított tranzakcióhoz kell, hogy tartozzon egy COMMIT vagy egy ROLLBACK utasítás!
04_MODIFY.sql
Módosítjuk az adatokat, illetve beszúrunk egy új rekordot.
05_SAVE_TAN.sql
Elmentjük a tranzakció aktuális állapotát „savepoint” néven.
use TransactionTest;
SAVE TRANSACTION savepoint;
SELECT 'Tranzakció aktuális állapota elmentve!';
06_BACK_TO_SAVEPOINT.sql
Ezzel térhetünk vissza az elmentett állapotba.
USE TransactionTest;
ROLLBACK TRAN savepoint;
SELECT * FROM TestTable;
07_COMMIT.sql
Eltároljuk a tranzakcióban végzett módosításokat.
08_ROLLBACK.sql
Semmissé tesszük a tranzakcióban végzett módosításokat.
09.sql
Töröljük a teszt adatbázist.

Transact SQL cikksorozat