Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLAzure Synapse Analytics
PdW (Analytics Platform System)
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Tento příkaz vrátí zpět explicitní nebo implicitní transakci na začátek transakce nebo na bod uložení uvnitř transakce. Slouží ROLLBACK TRANSACTION k vymazání všech úprav dat provedených od začátku transakce nebo z bodu uložení.
ROLLBACK TRANSACTION uvolní také prostředky uchovávané transakcí.
Tímto příkazem se nesmazat změny místních proměnných nebo proměnných tabulky.
Syntax
Syntaxe pro SQL Server, Azure SQL Database, Spravovanou instanci Azure SQL a databázi SQL v Microsoft Fabric.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Syntaxe datového skladu infrastruktury, Azure Synapse Analytics a paralelní databáze datového skladu
ROLLBACK { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric.
Název přiřazený k transakci s BEGIN TRANSACTION.
transaction_name musí odpovídat pravidlům identifikátorů, ale používají se pouze prvních 32 znaků názvu transakce. Pokud existují vnitřní transakce, transaction_name musí být název z vnějšího BEGIN TRANSACTION prohlášení.
transaction_name se vždy rozlišují malá a velká písmena, i když instance databázového stroje nerozlišuje malá a velká písmena.
@tran_name_variable
Platí pro: SQL Server 2008 (10.0.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, DATABÁZE SQL v Microsoft Fabric.
Název uživatelem definované proměnné obsahující platný název transakce. Proměnná musí být deklarována pomocí datového typu char, varchar, nchar nebo nvarchar .
savepoint_name
savepoint_name z SAVE TRANSACTION příkazu.
savepoint_name musí odpovídat pravidlům identifikátorů. Použijte savepoint_name , pokud by vrácení zpět mělo mít vliv pouze na část transakce po uložení bodu uložení.
@savepoint_variable
Název uživatelem definované proměnné obsahující platný název bodu uložení. Proměnná musí být deklarována pomocí datového typu char, varchar, nchar nebo nvarchar .
Zpracování chyb
Příkaz ROLLBACK TRANSACTION negeneruje uživateli žádné zprávy. Pokud jsou upozornění potřebná v uložených procedurách nebo triggerech, použijte příkazy RAISERROR nebo PRINT příkazy.
Remarks
ROLLBACK TRANSACTION bez savepoint_name nebo transaction_name se vrátí zpět na začátek transakce. Pokud existují vnitřní transakce, tento stejný příkaz vrátí zpět všechny vnitřní transakce do vnějšího BEGIN TRANSACTION příkazu. V obou případech ROLLBACK TRANSACTION dekrementuje systémovou @@TRANCOUNT funkci na 0.
ROLLBACK TRANSACTION savepoint_name se nekrementuje @@TRANCOUNT.
ROLLBACK TRANSACTION nelze odkazovat na savepoint_name v distribuovaných transakcích, a to buď explicitně s BEGIN DISTRIBUTED TRANSACTION místní transakcí, nebo s povýšením z místní transakce.
Transakci nelze vrátit zpět po COMMIT TRANSACTION provedení příkazu, s výjimkou případu, kdy COMMIT TRANSACTION je přidružen k vnitřní transakci, která je obsažena v rámci transakce, která se vrací zpět. V tomto případě se vnitřní transakce vrátí zpět, i když jste pro ni vydali COMMIT TRANSACTION .
V rámci transakce jsou povoleny duplicitní názvy bodů uložení, ale ROLLBACK TRANSACTION použití duplicitního názvu savepointu se vrátí pouze k nejnovějšímu SAVE TRANSACTION názvu aplikace savepoint.
Poznámka:
Databázový stroj nepodporuje nezávisle spravovatelné vnořené transakce. Potvrzení vnitřní transakce dekrementuje @@TRANCOUNT , ale nemá žádné jiné účinky. Vrácení zpět vnitřní transakce vždy vrátí zpět vnější transakce, pokud neexistuje savepoint a je zadán v ROLLBACK příkazu.
Interoperability
V uložených procedurách se ROLLBACK TRANSACTION příkaz bez savepoint_name nebo transaction_name vrátí zpět všechny příkazy k nejkrajnější BEGIN TRANSACTION. Příkaz ROLLBACK TRANSACTION v uložené proceduře, který způsobí @@TRANCOUNT , že při dokončení procedury má jinou hodnotu než hodnota na začátku procedury, vytvoří informační zprávu. Tato zpráva nemá vliv na následné zpracování.
ROLLBACK TRANSACTION Pokud je aktivační událost vydána:
Všechny změny dat provedené v tomto bodu v aktuální transakci se vrátí zpět, včetně všech provedených triggerem.
Trigger pokračuje v provádění všech zbývajících příkazů za příkazem
ROLLBACK. Pokud některý z těchto příkazů upraví data, změny se nevrátí zpět. Spuštěním těchto zbývajících příkazů se neaktivují žádné vnořené triggery.Příkazy v dávce po příkazu, který aktivoval trigger, se nespustí.
@@TRANCOUNT se při zadávání triggeru zvýší o jeden, i když je v režimu automatického dokončování. Systém zachází s triggerem jako s implicitní vnitřní transakcí.
Příkaz ROLLBACK TRANSACTION v uložené proceduře nemá vliv na následné příkazy v dávce, která volala proceduru. Následující příkazy v dávce se spustí.
Příkaz ROLLBACK TRANSACTION v triggeru ukončí dávku obsahující příkaz, který trigger aktivoval. Následující příkazy v dávce se nespustí.
ROLLBACK Účinek kurzoru je definován následujícími pravidly:
Při
CURSOR_CLOSE_ON_COMMITnastavení seONzavře,ROLLBACKale neudělí se všechny otevřené kurzory.U
CURSOR_CLOSE_ON_COMMITnastavenéROLLBACKOFFhodnoty nemá vliv na otevřené synchronníSTATICkurzory aniINSENSITIVEasynchronníSTATICkurzory, které jsou plně vyplněné. Otevřené kurzory jakéhokoli jiného typu jsou zavřené, ale nejsou uvolněny.Chyba, která ukončí dávku a vrátí zpět transakce uvolněné všechny kurzory, které byly deklarovány v dávce obsahující příkaz vytvářející chybu. Všechny kurzory jsou uvolněny bez ohledu na jejich typ nebo nastavení
CURSOR_CLOSE_ON_COMMIT. To zahrnuje kurzory deklarované v uložených procedurách volaných dávkou vytvářející chybu. Kurzory deklarované v dávce před dávkou, která vytváří chybu, podléhají předchozím dvěma pravidlům.Příkladem tohoto typu chyby je vzájemné zablokování. Výsledkem
ROLLBACKtohoto chování je také příkaz vydaný v triggeru.
Chování při uzamčení
Příkaz ROLLBACK TRANSACTION určující savepoint_name uvolní všechny zámky, které jsou získány nad rámec savepointu, s výjimkou eskalovaných a převedených zámků. Tyto zámky se nevyvolají a nepřevedou se zpět na předchozí režim uzamčení.
Permissions
Vyžaduje členství v public roli.
Examples
Následující příklad ukazuje účinek vrácení pojmenované transakce zpět. Po vytvoření tabulky spustí následující příkazy pojmenovanou transakci, vloží dva řádky a pak vrátí transakci pojmenovanou v proměnné @TransactionName. Další příkaz mimo pojmenovanou transakci vloží dva řádky. Dotaz vrátí výsledky předchozích příkazů.
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;
Tady je soubor výsledků.
value
-----
3
4
Související obsah
- BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
- ZAČÁTEK TRANSAKCE (Transact-SQL)
- transakce potvrzení (Transact-SQL)
- ZAVÁZEJ PRÁCI (Transact-SQL)
- PRÁCE NA NÁVRATU ZPĚT (Transact-SQL)
- ULOŽIT TRANSAKCI (Transact-SQL)
- Průvodce uzamčením transakcí a verzováním řádků