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í prostředky transakce a dekrementuje @@TRANCOUNT na 0. Pokud @@TRANCOUNT je větší než 1, COMMIT TRANSACTION dekrementuje @@TRANCOUNT pouze o 1 a transakce zůstane aktivní.
Syntax
Syntax for SQL Server, Azure SQL Database, SQL database in 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í na: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Nástroj SQL Server Database Engine ignoruje.
transaction_name určuje název transakce přiřazený předchozím BEGIN TRANSACTION.
transaction_namemusí odpovídat pravidlům identifikátorů, ale nesmí překročit 32 znaků.
transaction_name označuje programátorům, kteří jsou přidruženi k vnořenému BEGIN TRANSACTIONCOMMIT TRANSACTION souboru.
@tran_name_variable
Platí na: SQL Server, Azure SQL Database, SQL database in 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 je proměnné předáno více než 32 znaků, použijí se pouze 32 znaků. Zbývající znaky jsou zkráceny.
S DELAYED_DURABILITY = { VYPNUTO | ZAPNUTO }
Platí na: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Možnost, že požadavky na tuto transakci by měly být potvrzeny se zpožděnou stálostí. Požadavek se ignoruje, pokud byla databáze změněna nebo DELAYED_DURABILITY = DISABLEDDELAYED_DURABILITY = FORCED. Další informace naleznete v tématu Trvanlivost transakce.
Remarks
Je zodpovědností Transact-SQL programátora vydat COMMIT TRANSACTION pouze v okamžiku, kdy jsou logicky správná všechna data odkazovaná transakcí.
Pokud transakce potvrzena byla Transact-SQL distribuovaná transakce, COMMIT TRANSACTION aktivuje MS DTC použít dvoufázový potvrzovací protokol k potvrzení všech serverů 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í všech databází zahrnutých v transakci.
Při použití ve vnořených transakcí nejsou potvrzení vnitřních transakcí volné prostředky nebo provádět jejich změny trvalé. Změny dat jsou provedeny trvalé a prostředky uvolněny pouze při potvrzení vnější transakce. Každý COMMIT TRANSACTION vystavený, pokud @@TRANCOUNT je větší než jeden, se jednoduše sníží @@TRANCOUNT o 1. Když @@TRANCOUNT se nakonec dekrementuje na 0, je potvrzena celá vnější transakce. Vzhledem k tomu, transaction_name je ignorován databázový stroj, vydání COMMIT TRANSACTION odkazující na název vnější transakce, pokud jsou nevyřízené vnitřní transakce pouze o @@TRANCOUNT 1.
Vydání COMMIT TRANSACTION hodnoty když @@TRANCOUNT je nula vede k chybě; neexistuje žádná odpovídající BEGIN TRANSACTIONhodnota .
Po vydání příkazu nelze vrátit transakce COMMIT TRANSACTION zpět, protože změny dat byly provedeny trvalou součástí databáze.
Databázový stroj zvýší počet transakcí v rámci příkazu pouze tehdy, když počet transakcí je 0 na začátku příkazu.
Permissions
Vyžaduje členství ve veřejné 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 Synapse Analytics a PdW (Platform System)
Následující příklad odstraní kandidáta na pracovní pozici.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Potvrzení vnořené transakce
Platí na: SQL Server, Azure SQL Database, SQL database in Microsoft Fabric.
Následující příklad vytvoří tabulku, vygeneruje tři úrovně vnořených transakcí a pak potvrdí vnořenou transakci. Přestože každý COMMIT TRANSACTION příkaz má transaction_name parametr, mezi příkazy COMMIT TRANSACTIONBEGIN TRANSACTION a příkazy neexistuje žádný vztah.
Parametry transaction_name pomáhají programátoru zajistit, aby byl správný počet potvrzení kódován tak, aby se dekrementoval @@TRANCOUNT na hodnotu 0, a tak pro 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)