Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-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));