COMMIT TRANSACTION (Transact-SQL)COMMIT TRANSACTION (Transact-SQL)

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Markiert das Ende einer erfolgreichen impliziten oder expliziten Transaktion.Marks the end of a successful implicit or explicit transaction. Ist @@TRANCOUNT gleich 1, werden von COMMIT TRANSACTION alle Datenänderungen seit dem Start der Transaktion dauerhaft in der Datenbank gespeichert. Dadurch werden die von der Transaktion belegten Ressourcen freigegeben, und @@TRANCOUNT wird auf 0 (null) herabgesetzt.If @@TRANCOUNT is 1, COMMIT TRANSACTION makes all data modifications since the start of the transaction a permanent part of the database, frees the transaction's resources, and decrements @@TRANCOUNT to 0. Ist @@TRANCOUNT größer als 1, wird @@TRANCOUNT von COMMIT TRANSACTION lediglich um den Wert 1 verringert, und die Transaktion bleibt aktiv.When @@TRANCOUNT is greater than 1, COMMIT TRANSACTION decrements @@TRANCOUNT only by 1 and the transaction stays active.

Artikellinksymbol Transact-SQL-SyntaxkonventionenArticle link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Applies to SQL Server (starting with 2008) and Azure SQL Database
  
COMMIT [ { TRAN | TRANSACTION }  [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]  
[ ; ]  
-- Applies to Azure Synapse Analytics and Parallel Data Warehouse Database
  
COMMIT [ TRAN | TRANSACTION ] 
[ ; ]  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumenteArguments

transaction_nametransaction_name
GILT FÜR: SQL Server und Azure SQL-DatenbankAPPLIES TO: SQL Server and Azure SQL Database

Wird vom SQL Server-Datenbank-EngineSQL Server Database Engine ignoriert.Is ignored by the SQL Server-Datenbank-EngineSQL Server Database Engine. transaction_name gibt einen Transaktionsnamen an, der von einer vorherigen BEGIN TRANSACTION-Anweisung zugewiesen wurde.transaction_name specifies a transaction name assigned by a previous BEGIN TRANSACTION. transaction_name muss den Regeln für Bezeichner entsprechen, darf jedoch 32 Zeichen nicht überschreiten.transaction_namemust conform to the rules for identifiers, but can't exceed 32 characters. transaction_name zeigt den Programmierern an, welcher geschachtelten BEGIN TRANSACTION-Anweisung die COMMIT TRANSACTION-Anweisung zugeordnet ist.transaction_name indicates to programmers which nested BEGIN TRANSACTION the COMMIT TRANSACTION is associated with.

@tran_name_variable@tran_name_variable
GILT FÜR: SQL Server und Azure SQL-DatenbankAPPLIES TO: SQL Server and Azure SQL Database

Ist der Name einer benutzerdefinierten Variablen, die einen gültigen Transaktionsnamen enthält.Is the name of a user-defined variable containing a valid transaction name. Die Variable muss mit einem der folgenden Datentypen deklariert werden: char, varchar, nchar oder nvarchar.The variable must be declared with a char, varchar, nchar, or nvarchar data type. Werden mehr als 32 Zeichen an die Variable übergeben, werden nur die ersten 32 Zeichen verwendet, die restlichen Zeichen werden abgeschnitten.If more than 32 characters are passed to the variable, only 32 characters will be used; the remaining characters are truncated.

DELAYED_DURABILITYDELAYED_DURABILITY
GILT FÜR: SQL Server und Azure SQL-DatenbankAPPLIES TO: SQL Server and Azure SQL Database

Eine Option, die erfordert, dass für diese Transaktion ein Commit mit verzögerter Dauerhaftigkeit ausgeführt werden sollte.Option that requests this transaction should be committed with delayed durability. Die Anforderung wird ignoriert, wenn die Datenbank mit DELAYED_DURABILITY = DISABLED oder DELAYED_DURABILITY = FORCED geändert wurde.The request is ignored if the database has been altered with DELAYED_DURABILITY = DISABLED or DELAYED_DURABILITY = FORCED. Weitere Informationen finden Sie im Thema Steuern der Transaktionsdauerhaftigkeit.For more information, see Control Transaction Durability.

BemerkungenRemarks

Es liegt in der Verantwortung des Transact-SQLTransact-SQL-Programmierers, COMMIT TRANSACTION nur zu einem Zeitpunkt auszugeben, zu dem alle Daten, auf die die Transaktion verweist, logisch richtig sind.It's the responsibility of the Transact-SQLTransact-SQL programmer to issue COMMIT TRANSACTION only at a point when all data referenced by the transaction is logically correct.

War die Transaktion, für die ein Commit ausgeführt wird, eine verteilte Transact-SQLTransact-SQL-Transaktion, wird MS DTC von COMMIT TRANSACTION veranlasst, mithilfe eines Zweiphasencommit-Protokolls für alle an der Transaktion beteiligten Server ein Commit auszuführen.If the transaction committed was a Transact-SQLTransact-SQL distributed transaction, COMMIT TRANSACTION triggers MS DTC to use a two-phase commit protocol to commit all of the servers involved in the transaction. Erstreckt sich eine lokale Transaktion über mehrere Datenbanken in derselben Instanz des Datenbank-EngineDatabase Engines, verwendet die Instanz einen internen Zweiphasencommit, um für alle an der Transaktion beteiligten Datenbanken einen Commit auszuführen.When a local transaction spans two or more databases on the same instance of the Datenbank-EngineDatabase Engine, the instance uses an internal two-phase commit to commit all of the databases involved in the transaction.

Bei der Verwendung in geschachtelten Transaktionen werden durch Commits der inneren Transaktionen keine Ressourcen freigegeben oder Änderungen dauerhaft gespeichert.When used in nested transactions, commits of the inner transactions don't free resources or make their modifications permanent. Die Datenänderungen werden nur dann dauerhaft und Ressourcen nur dann freigegeben, wenn für die äußere Transaktion ein Commit ausgeführt wird.The data modifications are made permanent and resources freed only when the outer transaction is committed. Bei jeder COMMIT TRANSACTION-Anweisung, die ausgegeben wird, wenn @@TRANCOUNT größer als 1 ist, wird @@TRANCOUNT einfach um 1 reduziert.Each COMMIT TRANSACTION issued when @@TRANCOUNT is greater than one simply decrements @@TRANCOUNT by 1. Hat @@TRANCOUNT schließlich den Wert 0 (null) erreicht, wird für die gesamte äußere Transaktion ein Commit ausgeführt.When @@TRANCOUNT is finally decremented to 0, the entire outer transaction is committed. Da transaction_name vom Datenbank-EngineDatabase Engine ignoriert wird, wird beim Ausgeben einer COMMIT TRANSACTION-Anweisung, die auf den Namen einer äußeren Transaktion verweist, @@TRANCOUNT lediglich um 1 verringert, wenn ausstehende innere Transaktionen vorhanden sind.Because transaction_name is ignored by the Datenbank-EngineDatabase Engine, issuing a COMMIT TRANSACTION referencing the name of an outer transaction when there are outstanding inner transactions only decrements @@TRANCOUNT by 1.

Hat @@TRANCOUNT den Wert 0 (null), führt die Ausgabe einer COMMIT TRANSACTION-Anweisung zu einer Fehlermeldung, da keine entsprechende BEGIN TRANSACTION-Anweisung vorhanden ist.Issuing a COMMIT TRANSACTION when @@TRANCOUNT is zero results in an error; there's no corresponding BEGIN TRANSACTION.

Nach der Ausgabe einer COMMIT TRANSACTION-Anweisung kann kein Rollback für eine Transaktion ausgeführt werden, da die Datenänderungen zu einem dauerhaften Bestandteil der Datenbank geworden sind.You can't roll back a transaction after a COMMIT TRANSACTION statement is issued because the data modifications have been made a permanent part of the database.

Die Transaktionsanzahl in einer Anweisung wird vom Datenbank-EngineDatabase Engine nur erhöht, wenn die Transaktionsanzahl beim Start der Anweisung 0 (null) lautet.The Datenbank-EngineDatabase Engine increments the transaction count within a statement only when the transaction count is 0 at the start of the statement.

BerechtigungenPermissions

Erfordert die Mitgliedschaft in der public -Rolle.Requires membership in the public role.

BeispieleExamples

A.A. Ausführen eines Commits für eine TransaktionCommitting a transaction

GILT FÜR: SQL Server, Azure SQL-Datenbank, Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) und Parallel Data WarehouseParallel Data WarehouseAPPLIES TO: SQL Server, Azure SQL Database, Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse), and Parallel Data WarehouseParallel Data Warehouse

Im folgenden Beispiel wird ein Stellenbewerber gelöscht.The following example deletes a job candidate. AdventureWorks wird verwendet.It uses AdventureWorks.

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

B.B. Ausführen eines Commits für eine geschachtelte TransaktionCommitting a nested transaction

GILT FÜR: SQL Server und Azure SQL-DatenbankAPPLIES TO: SQL Server and Azure SQL Database

Im folgenden Beispiel werden eine Tabelle erstellt und drei Ebenen von geschachtelten Transaktionen generiert, und anschließend wird für die geschachtelte Transaktion ein Commit ausgeführt.The following example creates a table, generates three levels of nested transactions, and then commits the nested transaction. Obwohl jede COMMIT TRANSACTION-Anweisung einen transaction_name-Parameter aufweist, gibt es keine Beziehung zwischen der COMMIT TRANSACTION-Anweisung und der BEGIN TRANSACTION-Anweisung.Although each COMMIT TRANSACTION statement has a transaction_name parameter, there's no relationship between the COMMIT TRANSACTION and BEGIN TRANSACTION statements. Die transaction_name-Parameter helfen dem Programmierer, die richtige Anzahl von Commits zu codieren, damit @@TRANCOUNT auf 0 (null) herabgesetzt und dadurch für die äußere Transaktion ein Commit ausgeführt wird.The transaction_name parameters help the programmer ensure that the correct number of commits are coded to decrement @@TRANCOUNT to 0 and so to commit the outer transaction.

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

Weitere InformationenSee Also

BEGIN DISTRIBUTED TRANSACTION (Transact-SQL) BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
COMMIT WORK (Transact-SQL) COMMIT WORK (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
ROLLBACK WORK (Transact-SQL) ROLLBACK WORK (Transact-SQL)
SAVE TRANSACTION (Transact-SQL) SAVE TRANSACTION (Transact-SQL)
@@TRANCOUNT (Transact-SQL)@@TRANCOUNT (Transact-SQL)