Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
ROLLBACK TRANSACTION A tranzakció kezdetétől vagy a mentési pontig végrehajtott összes adatmódosítást törölheti. Emellett felszabadítja a tranzakció által birtokolt erőforrásokat is.
A tranzakciók visszaállítása nem tartalmazza a helyi változók vagy táblaváltozók módosításait. Ezeket a módosításokat ez az utasítás nem törli.
Transact-SQL szintaxis konvenciók
Syntax
Az SQL Server, az Azure SQL Database és a Fabric SQL Database szintaxisa.
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 tranzakcióhoz hozzárendelt név a következőn 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. Tranzakciók beágyazásakor 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 SQL Server-példány nem megkülönbözteti a kis- és nagybetűk megkülönböztetésének eseteit.
@tran_name_variable
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 feltételes visszaállításnak csak a tranzakció egy részét kell érintenie.
@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.
RAISERROR a hibák jelzésére szolgáló elsődleges utasítás.
Remarks
ROLLBACK TRANSACTION
savepoint_name vagy transaction_name nélkül visszatér a tranzakció elejére. A tranzakciók beágyazásakor ugyanez az utasítás az összes belső tranzakciót visszahelyezi a legkülső BEGIN TRANSACTION utasításba. 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 explicit módon indított vagy eszkalált elosztott tranzakciókban.
A tranzakció nem állítható vissza egy COMMIT TRANSACTION utasítás végrehajtása után, kivéve, ha a COMMIT TRANSACTION tranzakció egy beágyazott tranzakcióhoz van társítva, amely a visszaállítandó tranzakcióban található. Ebben az esetben a beágyazott tranzakció vissza lesz állítva, még akkor is, ha kiadta COMMIT TRANSACTION a tranzakciót.
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.
Interoperability
Tárolt eljárásokban a ROLLBACK TRANSACTIONsavepoint_name vagy transaction_name nélküli utasítások minden utasítást visszatekernek a legkülsőre BEGIN TRANSACTION. Egy ROLLBACK TRANSACTION tárolt eljárásban lévő utasítás, amely a tárolt eljárás befejeződésekor más értéket eredményez @@TRANCOUNT , mint a @@TRANCOUNT tárolt eljárás meghívásának értéke, tájékoztató üzenetet hoz létre. 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 vélelmezett beágyazott tranzakcióként kezeli az eseményindítót.)
ROLLBACK TRANSACTION a tárolt eljárásokban lévő utasítások nem befolyásolják az eljárást meghívó köteg későbbi utasításait; a kötegben lévő további utasítások végrehajtása.
ROLLBACK TRANSACTION az eseményindítókban lévő utasítások megszakítják 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 az alábbi három szabály határozza meg:
Ha
CURSOR_CLOSE_ON_COMMITbe van állítvaON,ROLLBACKbezárul, de nem oldja fel az összes nyitott kurzort.A beállítás
CURSOR_CLOSE_ON_COMMITOFFnemROLLBACKbefolyásolja a nyitott szinkronSTATIC,INSENSITIVEilletve a kurzorokat vagy aszinkronSTATICkurzorokat, amelyek teljesen fel lettek töltve. Bármely más típusú megnyitott kurzor bezárva van, de nincs felszabadítva.Egy köteg leállítását és belső visszaállítási felszabadítást generáló hiba a hibakimutatást tartalmazó kötegben deklarált összes kurzort felszabadítja. 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 hibaköteg által meghívott tárolt eljárásokban deklarált kurzorok. A hibaköteg előtt egy kötegben deklarált kurzorokra az első két szabály vonatkozik. A holtpont típusú hiba egy példa erre a hibatípusra. AzROLLBACKeseményindítóban kiadott utasítás is automatikusan létrehozza ezt a típusú hibát.
Zárolási viselkedés
A ROLLBACK TRANSACTIONsavepoint_name megadásával a savepointon kívül beszerzett zárolások feloldhatók, kivéve az eszkalációkat és átalakításokat. Ezek a zárolások nem szabadulnak fel, és nem lesznek visszaalakítva az előző zárolási módjukra.
Permissions
A nyilvános szerepkör tagságát igényli.
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;
GO
CREATE TABLE ValueTable ([value] INT);
GO
DECLARE @TransactionName 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