Megosztás a következőn keresztül:


VÉGLEGESÍTÉSI TRANZAKCIÓ (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)Raktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy sikeres implicit vagy explicit tranzakció végét jelöli meg. Ha @@TRANCOUNT 1, COMMIT TRANSACTION a tranzakció kezdete óta végrehajtott összes adatmódosítás az adatbázis állandó részét képezi, felszabadítja a tranzakció erőforrásait, és 0-ra @@TRANCOUNT csökken. Ha @@TRANCOUNT 1-nél nagyobb, COMMIT TRANSACTION csak 1-gyel csökken @@TRANCOUNT , és a tranzakció aktív marad.

Transact-SQL szintaxis konvenciók

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 } ) ]
[ ; ]

A Fabric Data Warehouse, az Azure Synapse Analytics és a párhuzamos adattárház-adatbázis szintaxisa.

COMMIT [ TRAN | TRANSACTION ]
[ ; ]

Arguments

transaction_name

Vonatkozik a következőkre: SQL Server, Azure SQL Database, SQL adatbázis a Microsoft Fabric-ben.

Az SQL Server adatbázismotor figyelmen kívül hagyja. transaction_name egy előző BEGIN TRANSACTIONáltal hozzárendelt tranzakciónevet ad meg. transaction_namemeg kell felelnie az azonosítókra vonatkozó szabályoknak, de nem haladhatja meg a 32 karaktert. transaction_name azt jelzi a programozóknak, hogy melyik programhoz BEGIN TRANSACTION van társítva.COMMIT TRANSACTION

@tran_name_variable

Vonatkozik a következőkre: SQL Server, Azure SQL Database, SQL adatbázis a Microsoft Fabric-ben.

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. Ha 32 karakternél több karaktert ad át a változónak, csak 32 karaktert használ. A többi karakter csonkolt.

WITH DELAYED_DURABILITY = { OFF | ON }

Vonatkozik a következőkre: SQL Server, Azure SQL Database, SQL adatbázis a Microsoft Fabric-ben.

A tranzakciót kérő lehetőséget késleltetett tartóssággal kell véglegesíteni. A rendszer figyelmen kívül hagyja a kérést, ha az adatbázist módosították vagy DELAYED_DURABILITY = DISABLEDDELAYED_DURABILITY = FORCEDmódosították. További információért lásd: Tranzakció tartósságának ellenőrzése.

Remarks

A Transact-SQL programozó felelőssége, hogy csak olyan időpontban adjon ki COMMIT TRANSACTION adatokat, amikor a tranzakció által hivatkozott összes adat logikailag helyes.

Ha a véglegesített tranzakció egy Transact-SQL elosztott tranzakció volt, COMMIT TRANSACTION az MS DTC kétfázisú véglegesítési protokollt aktivál a tranzakcióban részt vevő összes kiszolgáló véglegesítéséhez. Ha egy helyi tranzakció két vagy több adatbázisra terjed ki az adatbázismotor ugyanazon példányán, a példány egy belső kétfázisú véglegesítéssel véglegesíti a tranzakcióban érintett összes adatbázist.

Beágyazott tranzakciókban való használat esetén a belső tranzakciók véglegesítései nem szabadítják fel az erőforrásokat, és nem véglegesítik a módosításokat. Az adatmódosítások véglegesítésre kerülnek, és az erőforrások csak a külső tranzakció véglegesítésekor szabadulnak fel. Minden COMMIT TRANSACTION kibocsátott, ha @@TRANCOUNT nagyobb, mint egy egyszerűen decrements @@TRANCOUNT 1. Amikor @@TRANCOUNT végül 0-ra csökken, a teljes külső tranzakció véglegesítve lesz. Mivel transaction_name az adatbázismotor figyelmen kívül hagyja, COMMIT TRANSACTION a külső tranzakció nevére hivatkozva, ha vannak függőben lévő belső tranzakciók, csak 1-gyel csökken @@TRANCOUNT .

Ha nulla COMMIT TRANSACTION@@TRANCOUNT értéket ad ki, az hibát eredményez; nincs megfelelő BEGIN TRANSACTION.

Az utasítás kiadása után COMMIT TRANSACTION nem állíthat vissza tranzakciót, mert az adatmódosítások az adatbázis állandó részét képezték.

Az adatbázismotor csak akkor növeli a tranzakciószámot egy utasításon belül, ha a tranzakciószám 0 az utasítás elején.

Permissions

A nyilvános szerepkör tagságát igényli.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Tranzakció véglegesítése

A következőkre vonatkozik: SQL Server, Azure SQL Database, Azure Synapse Analytics és Analytics Platform System (PDW)

Az alábbi példa egy feladat-jelöltet töröl.

BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;

B. Beágyazott tranzakció véglegesítése

Vonatkozik a következőkre: SQL Server, Azure SQL Database, SQL adatbázis a Microsoft Fabric-ben.

Az alábbi példa létrehoz egy táblát, három szintű beágyazott tranzakciót hoz létre, majd véglegesíti a beágyazott tranzakciót. Bár minden COMMIT TRANSACTION utasítás transaction_name paraméterrel rendelkezik, nincs kapcsolat az és COMMIT TRANSACTION az BEGIN TRANSACTION utasítások között. A transaction_name paraméterek segítenek a programozónak biztosítani, hogy a véglegesítések megfelelő száma 0-ra @@TRANCOUNT csökkenjen, és így véglegesítse a külső tranzakciót.

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