Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Ez az utasítás visszaállít egy explicit vagy implicit tranzakciót a tranzakció elejére vagy a tranzakción belüli savepointra. A tranzakció kezdetétől vagy egy mentési ponttól végrehajtott összes adatmódosítás törlésére használható ROLLBACK TRANSACTION .
ROLLBACK TRANSACTION felszabadítja a tranzakció által birtokolt erőforrásokat is.
A helyi változók vagy táblaváltozók módosításait ez az utasítás nem törli.
Transact-SQL szintaxis konvenciók
Syntax
Szintaxis az SQL Serverhez, az Azure SQL Database-hez, a felügyelt Azure SQL-példányhoz és a Microsoft Fabric SQL-adatbázishoz.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
A Fabric Data Warehouse, az Azure Synapse Analytics és a párhuzamos adattárház-adatbázis szintaxisa.
ROLLBACK { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.
A tranzakcióhoz hozzárendelt név a következővel BEGIN TRANSACTION: .
transaction_name meg kell felelnie az azonosítókra vonatkozó szabályoknak, de csak a tranzakció nevének első 32 karakterét használja a rendszer. Belső tranzakciók esetén transaction_name a legkülső BEGIN TRANSACTION utasításból származó névnek kell lennie.
transaction_name mindig megkülönbözteti a kis- és nagybetűk megkülönböztetése, még akkor is, ha az adatbázismotor-példány nem érzékeny a kis- és nagybetűkre.
@tran_name_variable
A következőkre vonatkozik: SQL Server 2008 (10.0.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány, SQL Database a Microsoft Fabricben.
Egy felhasználó által definiált változó neve, amely érvényes tranzakciónevet tartalmaz. A változót karakter, varchar, nchar vagy nvarchar adattípussal kell deklarálni.
savepoint_name
savepoint_name egy SAVE TRANSACTION nyilatkozatból.
savepoint_name meg kell felelniük az azonosítókra vonatkozó szabályoknak. Használja savepoint_name , ha a visszaállítás csak a tranzakciónak a mentési pont utáni részét érinti.
@savepoint_variable
Egy felhasználó által definiált változó neve, amely érvényes savepoint-nevet tartalmaz. A változót karakter, varchar, nchar vagy nvarchar adattípussal kell deklarálni.
Hibakezelés
Az ROLLBACK TRANSACTION utasítások nem hoznak létre üzeneteket a felhasználónak. Ha a tárolt eljárásokban vagy eseményindítókban figyelmeztetésekre van szükség, használja az vagy RAISERROR az PRINT utasításokat.
Remarks
ROLLBACK TRANSACTION
savepoint_name vagy transaction_name nélkül visszatér a tranzakció elejére. Ha vannak belső tranzakciók, ez az utasítás az összes belső tranzakciót visszaállítja a legkülső BEGIN TRANSACTION utasításra. Mindkét esetben ROLLBACK TRANSACTION a @@TRANCOUNT rendszerfüggvény 0-ra csökken.
ROLLBACK TRANSACTION savepoint_name nem csökken @@TRANCOUNT.
ROLLBACK TRANSACTION nem hivatkozhat savepoint_name a helyi tranzakcióval BEGIN DISTRIBUTED TRANSACTION kifejezetten elindított vagy előléptetett elosztott tranzakciókban.
A tranzakciók nem állíthatók vissza egy COMMIT TRANSACTION utasítás végrehajtása után, kivéve, ha a COMMIT TRANSACTION tranzakció egy belső tranzakcióhoz van társítva, amely a visszagördített tranzakcióban található. Ebben az esetben a belső tranzakció vissza lesz állítva, még akkor is, ha kiadta COMMIT TRANSACTION a számára.
Egy tranzakción belül a savepoint-nevek duplikálása engedélyezett, de ROLLBACK TRANSACTION a duplikált savepoint-név használata csak a legutóbbira SAVE TRANSACTION kerül vissza ezzel a savepoint-névvel.
Megjegyzés:
Az adatbázismotor nem támogatja az egymástól függetlenül kezelhető beágyazott tranzakciókat. Belső tranzakciós decrements @@TRANCOUNT véglegesítés, de nincs más hatása. A belső tranzakciók visszaállítása mindig visszaállítja a külső tranzakciót, kivéve, ha létezik mentési pont , és az ROLLBACK utasításban meg van adva.
Interoperability
A tárolt eljárásokban egy ROLLBACK TRANSACTIONsavepoint_name vagy transaction_name nélküli utasítás az összes utasítást visszaállítja a legkülsőre BEGIN TRANSACTION. Egy ROLLBACK TRANSACTION tárolt eljárás azon utasítása, amely az eljárás befejezésekor eltérő értéket eredményez @@TRANCOUNT , mint az eljárás kezdetének értéke, tájékoztató üzenetet eredményez. Ez az üzenet nem befolyásolja a későbbi feldolgozást.
Ha egy eseményindítóban ad ki egy ROLLBACK TRANSACTION eseményindítót:
Az aktuális tranzakció ezen pontjának összes adatmódosítása vissza lesz állítva, beleértve az eseményindító által végrehajtott módosításokat is.
Az eseményindító az utasítás után is végrehajtja a
ROLLBACKfennmaradó utasításokat. Ha ezen utasítások bármelyike módosítja az adatokat, a módosítások nem lesznek visszaállítva. A fennmaradó utasítások végrehajtása nem aktiválja a beágyazott eseményindítókat.A kötegben az eseményindítót aktiváló utasítás utáni utasítások nem lesznek végrehajtva.
@@TRANCOUNT egy eseményindító beírásakor egyenként növekszik, még akkor is, ha autocommit módban van. A rendszer egy eseményindítót hallgatólagos belső tranzakcióként kezel.
A ROLLBACK TRANSACTION tárolt eljárásban lévő utasítások nem befolyásolják az eljárást meghívó köteg későbbi utasításait. A rendszer végrehajtja a köteg későbbi utasításait.
Az ROLLBACK TRANSACTION eseményindítóban lévő utasítás leállítja az eseményindítót aktiváló utasítást tartalmazó köteget. A köteg későbbi utasításai nem lesznek végrehajtva.
A kurzorokra gyakorolt hatást ROLLBACK a következő szabályok határozzák meg:
Ha
CURSOR_CLOSE_ON_COMMITbe vanONállítva, bezárul,ROLLBACKde nem oldja fel az összes megnyitott kurzort.A
CURSOR_CLOSE_ON_COMMITbeállításOFFROLLBACKértéke nem befolyásolja a nyitott szinkronSTATIC,INSENSITIVEilletve a kurzorokat vagy aszinkronSTATICkurzorokat, amelyek teljesen fel vannak töltve. Bármely más típusú megnyitott kurzor bezárva van, de nincs felszabadítva.Egy olyan hiba, amely leállítja a köteget, és visszaállítja a tranzakció felszabadítását, a hibát létrehozó utasítást tartalmazó kötegben deklarált összes kurzort áthelyezi. A kurzorok a típusuktól és a beállításuktól
CURSOR_CLOSE_ON_COMMITfüggetlenül el vannak helyezve. Ide tartoznak a hibát létrehozó köteg által meghívott tárolt eljárásokban deklarált kurzorok. A hibát létrehozó kötegben deklarált kurzorokra az előző két szabály vonatkozik.A holtpont egy példa erre a hibatípusra. Egy
ROLLBACKeseményindítóban kiadott utasítás is ezt a viselkedést eredményezi.
Zárolási viselkedés
A ROLLBACK TRANSACTIONsavepoint_name jelölő utasítás a savepointon kívül beszerzett összes zárolást felszabadítja, kivéve az eszkalált és konvertált zárolásokat. Ezek a zárolások nem szabadulnak fel, és nem lesznek visszaalakítva az előző zárolási módjukra.
Permissions
Tagságot igényel a public szerepkörben.
Examples
Az alábbi példa egy elnevezett tranzakció visszagördülésének hatását mutatja be. A tábla létrehozása után a következő utasítások elindítanak egy elnevezett tranzakciót, beszúrnak két sort, majd visszaállítják a változóban @TransactionNameelnevezett tranzakciót. A névvel ellátott tranzakción kívül egy másik utasítás két sort szúr be. A lekérdezés az előző utasítások eredményeit adja vissza.
USE tempdb;
CREATE TABLE ValueTable
(
value INT
);
DECLARE @TransactionName AS VARCHAR (20) = 'Transaction1';
BEGIN TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (1), (2);
ROLLBACK TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (3), (4);
SELECT [value]
FROM ValueTable;
DROP TABLE ValueTable;
Itt van az eredmények összessége.
value
-----
3
4