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
Označí konec úspěšné implicitní nebo explicitní transakce.
Pokud @@TRANCOUNT je 1, COMMIT TRANSACTION provede všechny úpravy dat od začátku transakce trvalou část databáze, uvolní transakční prostředky a dekrementuje @@TRANCOUNT na 0.
Pokud @@TRANCOUNT je větší než 1, COMMIT TRANSACTION dekrementuje @@TRANCOUNT o 1 a transakce zůstane aktivní.
Syntax
Syntaxe pro SQL Server, Azure SQL Database, Spravovanou instanci Azure SQL a databázi SQL v Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Syntaxe datového skladu infrastruktury, Azure Synapse Analytics a paralelní databáze datového skladu
COMMIT [ 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.
Ignorováno databázovým strojem při zadání pomocí COMMIT.
transaction_name určuje název transakce přiřazený předchozím BEGIN TRANSACTION.
transaction_name musí odpovídat pravidlům identifikátorů, ale nesmí překročit 32 znaků.
transaction_name lze použít jako techniku dokumentace kódu k označení, ke kterému z vnitřních BEGIN TRANSACTIONCOMMIT TRANSACTION příkazů je příkaz přidružený.
@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 . Pokud proměnné předáte více než 32 znaků, použijí se pouze prvních 32 znaků. Zbývající znaky jsou zkráceny.
S DELAYED_DURABILITY = { VYPNUTO | ZAPNUTO }
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.
Možnost, která požaduje, aby byla tato transakce potvrzena s zpožděnou stálostí. Požadavek se ignoruje, pokud je pro databázi zakázaná zpožděná stálost. Transakce je potvrzena se zpožděnou stálostí bez ohledu na tuto možnost, pokud je pro databázi vynucena zpožděná stálost.
Další informace naleznete v tématu Trvanlivost transakce.
Remarks
Je odpovědností aplikace, aby v okamžiku, COMMIT TRANSACTION kdy všechna data odkazovaná transakcí dosáhla zamýšleného stavu konzistence.
Pokud transakce potvrzena byla Transact-SQL distribuovaná transakce, COMMIT TRANSACTION aktivuje MS DTC použít dvoufázový potvrzovací protokol k potvrzení transakce na všech serverech zapojených do transakce. Pokud místní transakce zahrnuje dvě nebo více databází ve stejné instanci databázového stroje, instance používá interní dvoufázové potvrzení k potvrzení transakce ve všech databázích zapojených do transakce.
Pokud se používá pro vnitřní transakce, potvrzení neobsahuje volné prostředky ani neprovádí trvalé úpravy dat. Změny dat jsou provedeny trvalé a prostředky jsou uvolněny pouze při potvrzení vnější transakce. Každý COMMIT TRANSACTION vystavený, pokud @@TRANCOUNT je větší než 1 dekrementuje @@TRANCOUNT o 1, ale nemá žádné jiné účinky. Když @@TRANCOUNT se nakonec dekrementuje na 0, je potvrzena celá vnější transakce. Vzhledem k tomu, že databázový stroj transaction_name je COMMIT TRANSACTION ignorován, vydává COMMIT TRANSACTION odkazující na název vnější transakce, pokud existují nevyřízené vnitřní transakce pouze o @@TRANCOUNT 1.
Vydání COMMIT TRANSACTION hodnoty když @@TRANCOUNT je nula výsledkem chyby, protože neexistuje žádná odpovídající BEGIN TRANSACTIONhodnota .
Po vydání příkazu nelze vrátit transakce COMMIT TRANSACTION zpět, protože úpravy dat jsou již trvalou součástí databáze.
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.
Permissions
Vyžaduje členství v public roli.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Potvrzení transakce
Platí pro: SQL Server, Azure SQL Database, Azure SQL Managed Instance, sql database in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
Následující příklad odstraní kandidáta na pracovní pozici.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Potvrzení vnější transakce a vnitřní transakce
Platí pro: SQL Server, Azure SQL Database, Azure SQL Managed Instance, databáze SQL v Microsoft Fabric.
Následující příklad vytvoří tabulku, spustí vnější a dvě vnitřní transakce a pak potvrdí každou transakci.
Parametry transaction_name použité v tomto příkladu pomáhají vývojáři zajistit, aby byl správný počet potvrzení zakódován tak, aby se dekrementoval @@TRANCOUNT na 0 a k potvrzení vnější transakce.
IF OBJECT_ID(N'TestTran', N'U') IS NOT NULL
DROP TABLE TestTran;
GO
CREATE TABLE TestTran (
Cola INT PRIMARY KEY,
Colb CHAR(3)
);
GO
-- This statement sets @@TRANCOUNT to 1.
BEGIN TRANSACTION OuterTran;
PRINT N'Transaction count after BEGIN OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (1, 'aaa');
-- This statement sets @@TRANCOUNT to 2.
BEGIN TRANSACTION Inner1;
PRINT N'Transaction count after BEGIN Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (2, 'bbb');
-- This statement sets @@TRANCOUNT to 3.
BEGIN TRANSACTION Inner2;
PRINT N'Transaction count after BEGIN Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO TestTran
VALUES (3, 'ccc');
-- This statement decrements @@TRANCOUNT to 2.
-- Nothing is committed.
COMMIT TRANSACTION Inner2;
PRINT N'Transaction count after COMMIT Inner2 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 1.
-- Nothing is committed.
COMMIT TRANSACTION Inner1;
PRINT N'Transaction count after COMMIT Inner1 = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
-- This statement decrements @@TRANCOUNT to 0 and
-- commits outer transaction OuterTran.
COMMIT TRANSACTION OuterTran;
PRINT N'Transaction count after COMMIT OuterTran = ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
Související obsah
- BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
- ZAČÁTEK TRANSAKCE (Transact-SQL)
- ZAVÁZEJ PRÁCI (Transact-SQL)
- transakce vrácení zpět (Transact-SQL)
- PRÁCE NA NÁVRATU ZPĚT (Transact-SQL)
- ULOŽIT TRANSAKCI (Transact-SQL)
-
@@TRANCOUNT (Transact-SQL) - Průvodce uzamčením transakcí a verzováním řádků