Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLAzure Synapse Analytics
Analytics Platform System (PDW)
Almacenamiento en Microsoft Fabric
Base de datos SQL en Microsoft Fabric
Marca el final de una transacción correcta, implícita o explícita.
Si @@TRANCOUNT es 1, COMMIT TRANSACTION realiza todas las modificaciones de datos desde el inicio de la transacción una parte permanente de la base de datos, libera los recursos de transacción y disminuye @@TRANCOUNT en 0.
Cuando @@TRANCOUNT es mayor que 1, COMMIT TRANSACTION disminuye @@TRANCOUNT en 1 y la transacción permanece activa.
Convenciones de sintaxis de Transact-SQL
Syntax
Sintaxis de SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Sintaxis para Fabric Data Warehouse, Azure Synapse Analytics y base de datos de almacenamiento de datos paralelos.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric.
Omite el motor de base de datos cuando se especifica con COMMIT.
transaction_name especifica un nombre de transacción asignado por un objeto anteriorBEGIN TRANSACTION.
transaction_name deben cumplir las reglas de los identificadores, pero no pueden superar los 32 caracteres.
transaction_name se puede usar como técnica de documentación de código para indicar a qué instrucciones internas BEGIN TRANSACTION está asociada la COMMIT TRANSACTION instrucción.
@tran_name_variable
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric.
Nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se usan los primeros 32 caracteres. Los caracteres restantes se truncan.
CON DELAYED_DURABILITY = { OFF | ON }
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric.
Opción que solicita que esta transacción se confirme con durabilidad diferida. La solicitud se omite si la durabilidad diferida está deshabilitada para la base de datos. Una transacción se confirma con durabilidad diferida independientemente de esta opción si se fuerza la durabilidad diferida para la base de datos.
Para saber más, vea Control de la durabilidad de las transacciones.
Remarks
Es responsabilidad de la aplicación emitir COMMIT TRANSACTION en un momento en el que todos los datos a los que hace referencia la transacción alcanzan el estado previsto de coherencia.
Si la transacción confirmada era una transacción distribuida Transact-SQL, COMMIT TRANSACTION desencadena MS DTC para usar un protocolo de confirmación en dos fases para confirmar la transacción en todos los servidores implicados en la transacción. Cuando una transacción local abarca dos o más bases de datos en la misma instancia del motor de base de datos, la instancia usa una confirmación interna en dos fases para confirmar la transacción en todas las bases de datos implicadas en la transacción.
Cuando se usa para transacciones internas, una confirmación no libera recursos ni realiza modificaciones de datos permanentes. Las modificaciones de datos se realizan permanentemente y los recursos solo se liberan cuando se confirma la transacción externa. Cada COMMIT TRANSACTION uno emitido cuando @@TRANCOUNT es mayor que 1 decrementos @@TRANCOUNT en 1 pero no tiene otros efectos. Cuando @@TRANCOUNT finalmente se disminuye a 0, se confirma toda la transacción externa. Dado que el motor de base de datos omite transaction_name especificado con COMMIT TRANSACTION , emite una COMMIT TRANSACTION referencia al nombre de una transacción externa cuando hay transacciones internas pendientes solo disminuye en @@TRANCOUNT 1.
La emisión de un COMMIT TRANSACTION valor when @@TRANCOUNT es cero produce un error porque no hay ningún correspondiente BEGIN TRANSACTION.
No se puede revertir una transacción después de emitir una COMMIT TRANSACTION instrucción , ya que las modificaciones de datos ya son una parte permanente de la base de datos.
Nota:
El motor de base de datos no admite transacciones anidadas administrables de forma independiente. Confirmación de una disminución de @@TRANCOUNT transacción interna, pero no tiene otros efectos. Una reversión de una transacción interna siempre revierte la transacción externa, a menos que exista un punto de guardado y se especifique en la ROLLBACK instrucción .
Permissions
Requiere la pertenencia al rol public.
Examples
Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.
A. Confirmación de una transacción
Se aplica a: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
En el siguiente ejemplo se elimina a un candidato a un puesto de trabajo.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Confirmar una transacción externa y las transacciones internas
Se aplica a: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database en Microsoft Fabric.
En el ejemplo siguiente se crea una tabla, se inicia una transacción externa y dos internas y, a continuación, se confirma cada transacción. Los parámetros de transaction_name usados en este ejemplo ayudan al desarrollador a asegurarse de que el número correcto de confirmaciones se codifica para disminuir @@TRANCOUNT a 0 y confirmar la transacción externa.
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));
Contenido relacionado
- INICIAR TRANSACCIÓN DISTRIBUIDA (Transact-SQL)
- INICIAR LA TRANSACCIÓN (Transact-SQL)
- COMPROMETER EL TRABAJO (Transact-SQL)
- TRANSACCIÓN DE REVERSIÓN (Transact-SQL)
- TRABAJO DE RETROCESO (Transact-SQL)
- GUARDAR TRANSACCIÓN (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Guía de versiones de bloqueo de fila y transacción