Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Azure Synapse Analytics
Analytics Platform System (PDW)
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Markiert das Ende einer erfolgreichen impliziten oder expliziten Transaktion.
Wenn @@TRANCOUNT 1 ist, COMMIT TRANSACTION werden alle Datenänderungen seit Beginn der Transaktion als dauerhafter Teil der Datenbank vorgenommen, die Transaktionsressourcen freigegeben und auf 0 erhöht @@TRANCOUNT .
Wenn @@TRANCOUNT größer als 1 ist, COMMIT TRANSACTION werden die Schritte @@TRANCOUNT um 1 erhöht, und die Transaktion bleibt aktiv.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax für SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Syntax für Fabric Data Warehouse, Azure Synapse Analytics und Parallel Data Warehouse-Datenbank.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Gilt für: SQL Server 2008 (10.0.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric.
Wird vom Datenbankmodul ignoriert, wenn es mit COMMIT.
transaction_name gibt einen Transaktionsnamen an, der einem vorherigen BEGIN TRANSACTIONZugeordnet ist.
transaction_name müssen den Regeln für Bezeichner entsprechen, dürfen jedoch 32 Zeichen nicht überschreiten.
transaction_name kann als Codedokumentationstechnik verwendet werden, um anzugeben, welcher der inneren BEGIN TRANSACTION Anweisungen zugeordnet ist, denen die COMMIT TRANSACTION Anweisung zugeordnet ist.
@tran_name_variable
Gilt für: SQL Server 2008 (10.0.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric.
Der Name einer benutzerdefinierten Variablen, die einen gültigen Transaktionsnamen enthält. Die Variable muss mit einem der folgenden Datentypen deklariert werden: char, varchar, nchar oder nvarchar. Wenn mehr als 32 Zeichen an die Variable übergeben werden, werden nur die ersten 32 Zeichen verwendet. Die verbleibenden Zeichen werden abgeschnitten.
MIT DELAYED_DURABILITY = { OFF | ON }
Gilt für: SQL Server 2008 (10.0.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric.
Die Option, die anfordert, dass diese Transaktion mit verzögerter Haltbarkeit zugesichert wird. Die Anforderung wird ignoriert, wenn die verzögerte Haltbarkeit für die Datenbank deaktiviert ist. Eine Transaktion wird mit verzögerter Haltbarkeit unabhängig von dieser Option zugesichert, wenn eine verzögerte Haltbarkeit für die Datenbank erzwungen wird.
Weitere Informationen finden Sie im Thema Steuern der Transaktionsdauerhaftigkeit.
Remarks
Es liegt in der Verantwortung der Anwendung, an einem Punkt ausstellen COMMIT TRANSACTION zu müssen, an dem alle daten, auf die durch die Transaktion verwiesen wird, den beabsichtigten Konsistenzstatus erreicht.
Wenn es sich bei der zugesicherten Transaktion um eine Transact-SQL verteilte Transaktion handelt, löst MS DTC aus, COMMIT TRANSACTION um ein zweistufiges Commitprotokoll zu verwenden, um die Transaktion auf allen servern zu übernehmen, die an der Transaktion beteiligt sind. Wenn eine lokale Transaktion zwei oder mehr Datenbanken auf derselben Instanz des Datenbankmoduls umfasst, verwendet die Instanz einen internen Commit in zwei Phasen, um die Transaktion in allen datenbanken zu übernehmen, die an der Transaktion beteiligt sind.
Wenn ein Commit für interne Transaktionen verwendet wird, werden keine Ressourcen freigegeben oder Datenänderungen dauerhaft vorgenommen. Die Datenänderungen werden dauerhaft vorgenommen, und Ressourcen werden nur freigegeben, wenn die äußere Transaktion zugesichert wird. Jede COMMIT TRANSACTION ausgegeben wird, wenn @@TRANCOUNT größer als 1 Stufen @@TRANCOUNT , aber keine anderen Auswirkungen hat. Wenn @@TRANCOUNT schließlich auf 0 erhöht wird, wird die gesamte äußere Transaktion zugesichert. Da transaction_name durch COMMIT TRANSACTION das Datenbankmodul ignoriert wird, wird ein COMMIT TRANSACTION Verweis auf den Namen einer äußeren Transaktion ausgestellt, wenn es ausstehende innere Transaktionen nur um 1 gibt @@TRANCOUNT .
Das Ausgeben eines COMMIT TRANSACTION Wenn @@TRANCOUNT null ist, führt zu einem Fehler, da kein entsprechender BEGIN TRANSACTIONFehler vorhanden ist.
Sie können ein Rollback einer Transaktion nach der Ausstellung einer COMMIT TRANSACTION Anweisung nicht ausführen, da die Datenänderungen bereits ein dauerhafter Bestandteil der Datenbank sind.
Hinweis
Das Datenbankmodul unterstützt keine unabhängig verwaltbaren geschachtelten Transaktionen. Ein Commit einer inneren @@TRANCOUNT Transaktion wird erhöht, hat jedoch keine anderen Auswirkungen. Ein Rollback einer inneren Transaktion führt immer einen Rollback der äußeren Transaktion durch, es sei denn, ein Speicherpunkt ist vorhanden und wird in der ROLLBACK Anweisung angegeben.
Permissions
Erfordert die Mitgliedschaft in der Rolle public.
Examples
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
A. Commit für eine Transaktion
Gilt für: SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
Im folgenden Beispiel wird ein Stellenbewerber gelöscht.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Commit einer äußeren Transaktion und der inneren Transaktionen
Gilt für: SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric.
Im folgenden Beispiel wird eine Tabelle erstellt, eine äußere und zwei innere Transaktionen gestartet und anschließend jede Transaktion ausgeführt. Die in diesem Beispiel verwendeten transaction_name Parameter helfen dem Entwickler, sicherzustellen, dass die richtige Anzahl von Commits codiert wird, um auf 0 zu erhöhen @@TRANCOUNT und die äußere Transaktion zu übernehmen.
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));
Verwandte Inhalte
- STARTEN DER VERTEILTEN TRANSAKTION (Transact-SQL)
- TRANSAKTION BEGINNEN (Transact-SQL)
- ARBEIT ZUWEISEN (Transact-SQL)
- ROLLBACK-TRANSAKTION (Transact-SQL)
- ROLLBACK-ARBEIT (Transact-SQL)
- SPEICHERN TRANSAKTION (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Handbuch zu Transaktionssperren und Zeilenversionsverwaltung