Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 da base de dados, liberta os recursos da transação e decremente @@TRANCOUNT para 0.
Quando @@TRANCOUNT for superior a 1, COMMIT TRANSACTION decremento @@TRANCOUNT em 1 e a transação mantém-se ativa.
Transact-SQL convenções de sintaxe
Syntax
Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, 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 2008 (10.0.x) e versões posteriores, Azure SQL Database, Azure SQL Managed Instance, base de dados SQL no Microsoft Fabric.
Ignorado pelo Motor de Base de Dados quando especificado com COMMIT.
transaction_name especifica um nome de transação atribuído por um arquivo BEGIN TRANSACTION.
transaction_name deve cumprir as regras dos identificadores, mas não pode exceder os 32 caracteres.
transaction_name pode ser usado como técnica de documentação do código para indicar a que 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, Azure SQL Database, Azure SQL Managed Instance, base 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 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 os primeiros 32 caracteres serão usados. Os caracteres restantes são truncados.
COM DELAYED_DURABILITY = { DESLIGADO | EM }
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Azure SQL Database, Azure SQL Managed Instance, base de dados SQL no Microsoft Fabric.
A opção que exige que esta transação seja comprometida com durabilidade retardada. O pedido é ignorado se a durabilidade atrasada estiver desativada para a base de dados. Uma transação é comprometida com durabilidade retardada independentemente desta opção, se a durabilidade atrasada for imposta para a base de dados.
Para mais informações, veja Durabilidade do Controle de Transações.
Remarks
É responsabilidade da aplicação emitir COMMIT TRANSACTION no momento em que todos os dados referenciados pela transação atingem o estado de consistência pretendido.
Se a transação comprometida for uma transação distribuída Transact-SQL, COMMIT TRANSACTION o MS DTC aciona o uso de um protocolo de commit em duas fases para comprometer a transação em todos os servidores envolvidos na transação. Quando uma transação local abrange duas ou mais bases de dados na mesma instância do Motor de Base de Dados, a instância utiliza um commit interno em duas fases para comprometer a transação em todas as bases de dados envolvidas na transação.
Quando usado para transações internas, um commit não liberta recursos nem torna permanentes as modificações dos dados. As modificações dos dados tornam-se permanentes e os recursos só são libertados quando a transação externa é comprometida. Cada COMMIT TRANSACTION um emitido quando @@TRANCOUNT é maior que 1 decremento @@TRANCOUNT por 1, mas não tem outros efeitos. Quando @@TRANCOUNT é finalmente reduzido para 0, toda a transação externa é comprometida. Como transaction_name especificado com COMMIT TRANSACTION é ignorado pelo Motor de Base de Dados, que emite uma COMMIT TRANSACTION referência com o nome de uma transação externa quando existem transações internas pendentes, apenas decremente @@TRANCOUNT em 1.
Emitir um COMMIT TRANSACTION quando @@TRANCOUNT é zero resulta num erro porque não existe correspondente BEGIN TRANSACTION.
Não pode reverter uma transação após a emissão de um COMMIT TRANSACTION extrato, porque as modificações dos dados já fazem parte permanente da base de dados.
Observação
O Motor de Base de Dados não suporta transações aninhadas geríveis de forma independente. Um commit de uma transação interna diminui @@TRANCOUNT mas não tem outros efeitos. Um rollback de uma transação interna reverte sempre a transação externa, a menos que exista um ponto de gravação especificado na ROLLBACK instrução.
Permissions
Requer associação à public função.
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, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric, Azure Synapse Analytics, Analytics Platform System (PDW)
O exemplo a seguir exclui um candidato a emprego.
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
B. Comprometer uma transação externa e as transações internas
Aplica-se a: SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Database no Microsoft Fabric.
O exemplo seguinte cria uma tabela, inicia uma transação externa e duas internas, e depois faz commit de cada transação. Os parâmetros transaction_name usados neste exemplo ajudam o programador a garantir que o número correto de commits está codificado para decrementar @@TRANCOUNT para 0 e a comprometer 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)
- TRABALHO DE COMPROMISSO (Transact-SQL)
- TRANSAÇÃO DE REVERSÃO (Transact-SQL)
- TRABALHO DE REVERSÃO (Transact-SQL)
- SALVAR TRANSAÇÃO (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- Guia de bloqueio de transações e controle de versão de linhas