Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Armazém no Microsoft Fabric
Base de dados SQL no Microsoft Fabric
Marca o fim de uma transação implícita ou explícita bem-sucedida. Se @@TRANCOUNT for 1, COMMIT TRANSACTION faz com que todas as modificações de dados desde o início da transação sejam uma parte permanente do banco de dados, libera os recursos da transação e diminui @@TRANCOUNT para 0. Quando @@TRANCOUNT é maior que 1, COMMIT TRANSACTION diminui @@TRANCOUNT apenas em 1 e a transação permanece ativa.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe para SQL Server, Azure SQL Database, SQL Database no Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Sintaxe do Fabric Data Warehouse, Azure Synapse Analytics e Parallel Data Warehouse Database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Aplica-se a: SQL Server, Azure SQL Database, SQL Database em Microsoft Fabric.
Ignorado pelo Mecanismo de Banco de Dados do SQL Server.
transaction_name especifica um nome de transação atribuído por um arquivo BEGIN TRANSACTION.
transaction_namedeve estar em conformidade com as regras para identificadores, mas não pode exceder 32 caracteres.
transaction_name indica aos programadores a que aninhado BEGIN TRANSACTION o COMMIT TRANSACTION está associado.
@tran_name_variable
Aplica-se a: SQL Server, Azure SQL Database, SQL Database em Microsoft Fabric.
O nome de uma variável definida pelo usuário que contém um nome de transação válido. A variável deve ser declarada com um tipo de dados char, varchar, nchar ou nvarchar. Se mais de 32 caracteres forem passados para a variável, apenas 32 caracteres serão usados. Os caracteres restantes são truncados.
COM DELAYED_DURABILITY = { DESLIGADO | EM }
Aplica-se a: SQL Server, Azure SQL Database, SQL Database em Microsoft Fabric.
Opção que solicita esta transação deve ser comprometida com durabilidade atrasada. A solicitação será ignorada se o banco de dados tiver sido alterado com DELAYED_DURABILITY = DISABLED ou DELAYED_DURABILITY = FORCED. Para mais informações, veja Durabilidade do Controle de Transações.
Remarks
É da responsabilidade do programador Transact-SQL emitir COMMIT TRANSACTION apenas num momento em que todos os dados referenciados pela transação estejam logicamente corretos.
Se a transação confirmada foi uma transação distribuída Transact-SQL, COMMIT TRANSACTION aciona o MS DTC para usar um protocolo de confirmação de duas fases para confirmar todos os servidores envolvidos na transação. Quando uma transação local abrange dois ou mais bancos de dados na mesma instância do Mecanismo de Banco de Dados, a instância usa uma confirmação interna de duas fases para confirmar todos os bancos de dados envolvidos na transação.
Quando usadas em transações aninhadas, as confirmações das transações internas não liberam recursos nem tornam suas modificações permanentes. As modificações de dados são tornadas permanentes e os recursos liberados somente quando a transação externa é confirmada. Cada COMMIT TRANSACTION emitido quando @@TRANCOUNT é maior do que um simplesmente diminui @@TRANCOUNT por 1. Quando @@TRANCOUNT é finalmente reduzido para 0, toda a transação externa é comprometida. Como transaction_name é ignorado pelo Mecanismo de Banco de Dados, emitir uma COMMIT TRANSACTION referência ao nome de uma transação externa quando há transações internas pendentes @@TRANCOUNT diminui apenas em 1.
Emitir um COMMIT TRANSACTION quando @@TRANCOUNT é zero resulta em um erro, não há correspondente BEGIN TRANSACTION.
Não é possível reverter uma transação depois que uma COMMIT TRANSACTION instrução é emitida, porque as modificações de dados foram feitas como parte permanente do banco de dados.
O Mecanismo de Banco de Dados incrementa a contagem de transações dentro de uma instrução somente quando a contagem de transações é 0 no início da instrução.
Permissions
Requer adesão à função pública de .
Examples
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.
A. Confirmar uma transação
Aplica-se a: SQL Server, Banco de Dados SQL do Azure, Azure Synapse Analytics e PDW (Analytics Platform System)
O exemplo a seguir exclui um candidato a emprego.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Confirmar uma transação aninhada
Aplica-se a: SQL Server, Azure SQL Database, SQL Database em Microsoft Fabric.
O exemplo a seguir cria uma tabela, gera três níveis de transações aninhadas e confirma a transação aninhada. Embora cada COMMIT TRANSACTION instrução tenha um parâmetro transaction_name , não há relação entre as COMMIT TRANSACTION instruções e BEGIN TRANSACTION . Os parâmetros transaction_name ajudam o programador a garantir que o número correto de confirmações seja codificado para diminuir @@TRANCOUNT para 0 e, assim, confirmar a transação 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));