Sdílet prostřednictvím


COMMIT TRANSACTION (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsPdW (Analytics Platform System)Sklad v Microsoft FabricDatabá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í.

Transact-SQL konvence syntaxe

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));