Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do
AzureInstância
Gerenciada de SQL do AzureAzure Synapse Analytics
PDW (Analytics Platform System)
Warehouse no Microsoft Fabric
Banco de dados SQL no Microsoft Fabric
Marca o término de uma transação implícita ou explícita bem-sucedida.
Se @@TRANCOUNT for 1, COMMIT TRANSACTION fará de todas as modificações de dados desde o início da transação uma parte permanente do banco de dados, libera os recursos de transação e diminui @@TRANCOUNT para 0.
Quando @@TRANCOUNT for maior que 1, COMMIT TRANSACTION decrementos @@TRANCOUNT por 1 e a transação permanecer ativa.
Convenções de sintaxe de Transact-SQL
Syntax
Sintaxe para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Microsoft Fabric.
COMMIT [ { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ] ]
[ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[ ; ]
Sintaxe do Fabric Data Warehouse, do Azure Synapse Analytics e do Parallel Data Warehouse Database.
COMMIT [ TRAN | TRANSACTION ]
[ ; ]
Arguments
transaction_name
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Microsoft Fabric.
Ignorado pelo Mecanismo de Banco de Dados quando especificado com COMMIT.
transaction_name especifica um nome de transação atribuído por um BEGIN TRANSACTION.
transaction_name deve estar em conformidade com as regras para identificadores, mas não pode exceder 32 caracteres.
transaction_name pode ser usado como uma técnica de documentação de código para indicar com quais das instruções internas BEGIN TRANSACTION a COMMIT TRANSACTION instrução está associada.
@tran_name_variable
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no 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 precisa ser declarada com o tipo de dados char, varchar, nchar ou nvarchar. Se mais de 32 caracteres forem passados para a variável, somente os primeiros 32 caracteres serão usados. Os caracteres restantes são truncados.
COM DELAYED_DURABILITY = { OFF | LIGADO }
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Microsoft Fabric.
A opção que solicita que essa transação seja confirmada com durabilidade atrasada. A solicitação será ignorada se a durabilidade atrasada estiver desabilitada para o banco de dados. Uma transação é confirmada com durabilidade atrasada, independentemente dessa opção se a durabilidade atrasada for forçada para o banco de dados.
Para obter mais informações, veja Controlar a durabilidade da transação.
Remarks
É responsabilidade do aplicativo emitir COMMIT TRANSACTION em um momento em que todos os dados referenciados pela transação atingem o estado de consistência pretendido.
Se a transação confirmada for uma transação distribuída Transact-SQL, COMMIT TRANSACTION disparará o MS DTC para usar um protocolo de confirmação em duas fases para confirmar a transação em 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 a transação em todos os bancos de dados envolvidos na transação.
Quando usado para transações internas, uma confirmação não libera recursos nem torna permanentes as modificações de dados. As modificações de dados são permanentes e os recursos são liberados somente quando a transação externa é confirmada. Cada COMMIT TRANSACTION um emitido quando @@TRANCOUNT é maior que 1 decréscimos @@TRANCOUNT por 1, mas não tem outros efeitos. Quando @@TRANCOUNT é finalmente decrementado para 0, toda a transação externa é confirmada. Como transaction_name especificado com COMMIT TRANSACTION é 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 apenas decrementos @@TRANCOUNT por 1.
A emissão de um COMMIT TRANSACTION quando @@TRANCOUNT é zero resulta em um erro porque não há nenhum correspondente BEGIN TRANSACTION.
Você não pode reverter uma transação depois que uma COMMIT TRANSACTION instrução é emitida, pois as modificações de dados já são uma parte permanente do banco de dados.
Observação
O Mecanismo de Banco de Dados não dá suporte a transações aninhadas gerenciáveis de forma independente. Uma confirmação de uma transação interna diminui @@TRANCOUNT , mas não tem outros efeitos. Uma reversão de uma transação interna sempre reverte a transação externa, a menos que um ponto de salvamento exista e seja especificado na instrução ROLLBACK .
Permissions
Exige a associação à função public.
Examples
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que você pode baixar na página inicial Microsoft SQL Server Samples and Community Projects.
A. Confirmar uma transação
Aplica-se a: SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Microsoft Fabric, Azure Synapse Analytics, 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 externa e as transações internas
Aplica-se a: SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Banco de Dados SQL no Microsoft Fabric.
O exemplo a seguir cria uma tabela, inicia uma transação externa e duas internas e confirma cada transação. Os parâmetros de transaction_name usados neste exemplo ajudam o desenvolvedor a garantir que o número correto de confirmações seja codificado para diminuir @@TRANCOUNT para 0 e 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));
Conteúdo relacionado
- INICIAR TRANSAÇÃO DISTRIBUÍDA (Transact-SQL)
- INICIAR TRANSAÇÃO (Transact-SQL)
- COMPROMETER O TRABALHO (Transact-SQL)
- REVERTER TRANSAÇÃO (Transact-SQL)
- TRABALHO DE REVERSÃO (Transact-SQL)
- SALVAR TRANSAÇÃO (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Guia de controle de versão de linha e bloqueio de transações