Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Markeert het einde van een geslaagde impliciete of expliciete transactie.
Als @@TRANCOUNT dit 1 is, COMMIT TRANSACTION brengt u alle gegevenswijzigingen aan sinds het begin van de transactie een permanent deel van de database, maakt u de transactiebronnen vrij en neemt u af @@TRANCOUNT tot 0.
Wanneer @@TRANCOUNT de waarde groter is dan 1, COMMIT TRANSACTION blijven de beperkingen @@TRANCOUNT met 1 en blijft de transactie actief.
Transact-SQL syntaxis-conventies
Syntax
Syntaxis voor SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Syntaxis voor Fabric Data Warehouse, Azure Synapse Analytics en parallelle datawarehouse-database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Van toepassing op: SQL Server 2008 (10.0.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric.
Genegeerd door de database-engine wanneer deze is opgegeven met COMMIT.
transaction_name geeft een transactienaam op die is toegewezen door een vorige BEGIN TRANSACTION.
transaction_name moet voldoen aan de regels voor id's, maar mag niet langer zijn dan 32 tekens.
transaction_name kan worden gebruikt als een codedocumentatietechniek om aan te geven aan welke van de interne BEGIN TRANSACTION instructies de COMMIT TRANSACTION instructie is gekoppeld.
@tran_name_variable
Van toepassing op: SQL Server 2008 (10.0.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric.
De naam van een door de gebruiker gedefinieerde variabele met een geldige transactienaam. De variabele moet worden gedeclareerd met een gegevenstype char, varchar, nchar of nvarchar . Als er meer dan 32 tekens worden doorgegeven aan de variabele, worden alleen de eerste 32 tekens gebruikt. De resterende tekens worden afgekapt.
WITH DELAYED_DURABILITY = { UIT | ON }
Van toepassing op: SQL Server 2008 (10.0.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric.
De optie waarmee deze transactie moet worden doorgevoerd met vertraagde duurzaamheid. De aanvraag wordt genegeerd als vertraagde duurzaamheid is uitgeschakeld voor de database. Een transactie wordt vastgelegd met vertraagde duurzaamheid, ongeacht deze optie als vertraagde duurzaamheid wordt gedwongen voor de database.
Zie Control Transaction Durabilityvoor meer informatie.
Remarks
Het is de verantwoordelijkheid van de toepassing om op een moment uit te geven COMMIT TRANSACTION wanneer alle gegevens waarnaar wordt verwezen door de transactie de beoogde consistentiestatus bereiken.
Als de transactie een Transact-SQL gedistribueerde transactie was, COMMIT TRANSACTION activeert u MS DTC om een doorvoerprotocol in twee fasen te gebruiken om de transactie door te voeren op alle servers die betrokken zijn bij de transactie. Wanneer een lokale transactie twee of meer databases omvat op hetzelfde exemplaar van de database-engine, gebruikt het exemplaar een interne doorvoer in twee fasen om de transactie door te voeren in alle databases die betrokken zijn bij de transactie.
Wanneer een doorvoer wordt gebruikt voor interne transacties, worden er geen resources vrijgemaakt of worden gegevens permanent gewijzigd. De gegevenswijzigingen worden permanent gemaakt en resources worden alleen vrijgemaakt wanneer de buitenste transactie wordt doorgevoerd. Elke COMMIT TRANSACTION afgegeven wanneer @@TRANCOUNT groter is dan 1 degradaties @@TRANCOUNT met 1, maar heeft geen andere effecten. Wanneer @@TRANCOUNT tot slot wordt afgebroken tot 0, wordt de hele buitenste transactie doorgevoerd. Omdat transaction_name opgegeven met COMMIT TRANSACTION wordt genegeerd door de database-engine, geeft u een COMMIT TRANSACTION verwijzing naar de naam van een buitenste transactie wanneer er alleen openstaande binnentransacties met 1 worden afgetrokken @@TRANCOUNT .
Het uitgeven van een COMMIT TRANSACTION wanneer @@TRANCOUNT is nul resulteert in een fout omdat er geen corresponderende BEGIN TRANSACTIONis.
U kunt een transactie niet terugdraaien nadat een COMMIT TRANSACTION instructie is uitgegeven, omdat de gegevenswijzigingen al een permanent onderdeel van de database vormen.
Opmerking
De database-engine biedt geen ondersteuning voor onafhankelijk beheerbare geneste transacties. Een doorvoer van een interne transactie wordt afgenomen @@TRANCOUNT , maar heeft geen andere effecten. Een terugdraaibewerking van een interne transactie rolt altijd de buitenste transactie terug, tenzij er een savepoint bestaat en wordt opgegeven in de ROLLBACK instructie.
Permissions
Vereist lidmaatschap van de public rol.
Examples
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
A. Een transactie doorvoeren
Van toepassing op: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
In het volgende voorbeeld wordt een taakkandidaat verwijderd.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Een buitenste transactie en de binnenste transacties doorvoeren
Van toepassing op: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL-database in Microsoft Fabric.
In het volgende voorbeeld wordt een tabel gemaakt, een buitenste en twee interne transacties gestart en vervolgens elke transactie doorgevoerd. De transaction_name parameters die in dit voorbeeld worden gebruikt, helpen de ontwikkelaar ervoor te zorgen dat het juiste aantal doorvoeringen wordt gecodeerd om af te dalen naar 0 en om de buitenste transactie door te @@TRANCOUNT voeren.
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));
Verwante inhoud
- BEGIN GEDISTRIBUEERDE TRANSACTIE (Transact-SQL)
- BEGIN TRANSACTIE (Transact-SQL)
- DOORVOERWERK (Transact-SQL)
- TRANSACTIE voor terugdraaien (Transact-SQL)
- TERUGDRAAIEN VAN WERK (Transact-SQL)
- TRANSACTIE OPSLAAN (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Handleiding voor transactievergrendeling en rijversiebeheer