Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Markerar slutet på en implicit eller explicit transaktion.
Om @@TRANCOUNT är 1 gör COMMIT TRANSACTION du alla dataändringar sedan transaktionens början till en permanent del av databasen, frigör transaktionsresurserna och minskar @@TRANCOUNT till 0.
När @@TRANCOUNT är större än 1 COMMIT TRANSACTION minskar antalet @@TRANCOUNT med 1 och transaktionen förblir aktiv.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Syntax för Fabric Data Warehouse, Azure Synapse Analytics och Parallel Data Warehouse Database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Gäller för: SQL Server 2008 (10.0.x) och senare versioner, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric.
Ignoreras av databasmotorn när den anges med COMMIT.
transaction_name anger ett transaktionsnamn som tilldelats av en tidigare BEGIN TRANSACTION.
transaction_name måste följa reglerna för identifierare, men får inte överstiga 32 tecken.
transaction_name kan användas som en koddokumentationsteknik för att ange vilka av de inre BEGIN TRANSACTION uttryck som -instruktionen COMMIT TRANSACTION är associerad med.
@tran_name_variable
Gäller för: SQL Server 2008 (10.0.x) och senare versioner, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric.
Namnet på en användardefinierad variabel som innehåller ett giltigt transaktionsnamn. Variabeln måste deklareras med datatypen char, varchar, nchar eller nvarchar . Om fler än 32 tecken skickas till variabeln används endast de första 32 tecknen. Återstående tecken trunkeras.
MED DELAYED_DURABILITY = { OFF | PÅ }
Gäller för: SQL Server 2008 (10.0.x) och senare versioner, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric.
Alternativet som begär att den här transaktionen ska genomföras med fördröjd hållbarhet. Begäran ignoreras om fördröjd hållbarhet har inaktiverats för databasen. En transaktion utförs med fördröjd hållbarhet oavsett det här alternativet om fördröjd hållbarhet tvingas för databasen.
Mer information finns i Kontrollera transaktionshållbarhet.
Remarks
Det är programmets ansvar att utfärda COMMIT TRANSACTION vid en tidpunkt då alla data som refereras av transaktionen når det avsedda konsekvenstillståndet.
Om transaktionen som checkats in var en Transact-SQL distribuerad transaktion utlöser COMMIT TRANSACTION MS DTC att använda ett incheckningsprotokoll med två faser för att genomföra transaktionen på alla servrar som ingår i transaktionen. När en lokal transaktion sträcker sig över två eller flera databaser på samma instans av databasmotorn använder instansen en intern tvåfas incheckning för att genomföra transaktionen i alla databaser som ingår i transaktionen.
När den används för en inre transaktion frigör en incheckning inte resurser eller gör dataändringar permanenta. Dataändringarna görs permanenta och resurser frigörs endast när den yttre transaktionen har checkats in. Var och COMMIT TRANSACTION en utfärdas när @@TRANCOUNT är större än 1 minskningar @@TRANCOUNT med 1 men har inga andra effekter. När @@TRANCOUNT slutligen minskas till 0 checkas hela den yttre transaktionen in. Eftersom transaction_name som anges med COMMIT TRANSACTION ignoreras av databasmotorn, utfärdar du en COMMIT TRANSACTION referens till namnet på en yttre transaktion när det bara finns utestående inre transaktioner som minskar @@TRANCOUNT med 1.
Att utfärda ett COMMIT TRANSACTION när @@TRANCOUNT är noll resulterar i ett fel eftersom det inte finns någon motsvarande BEGIN TRANSACTION.
Du kan inte återställa en transaktion när en COMMIT TRANSACTION instruktion har utfärdats, eftersom dataändringarna redan är en permanent del av databasen.
Anmärkning
Databasmotorn stöder inte oberoende hanterbara kapslade transaktioner. En incheckning av en inre transaktion minskar @@TRANCOUNT men har inga andra effekter. En återställning av en inre transaktion återställer alltid den yttre transaktionen, såvida inte en sparandepunkt finns och anges i -instruktionen ROLLBACK .
Permissions
Kräver medlemskap i public rollen.
Examples
Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Checka in en transaktion
Gäller för: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
I följande exempel tas en jobbkandidat bort.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Checka in en yttre transaktion och de inre transaktionerna
Gäller för: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database i Microsoft Fabric.
I följande exempel skapas en tabell, en yttre och två inre transaktioner startas och varje transaktion checkas sedan in. De transaction_name parametrar som används i det här exemplet hjälper utvecklaren att se till att rätt antal incheckningar kodas för att minska @@TRANCOUNT till 0 och för att genomföra den yttre transaktionen.
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));