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 ponto de partida de uma transação explícita e local. As transações explícitas começam com o BEGIN TRANSACTION extrato e terminam com o COMMIT extrato ou ROLLBACK .
Transact-SQL convenções de sintaxe
Syntax
Sintaxe para SQL Server, Banco de Dados SQL do Azure, Banco de Dados SQL de Malha e Instância Gerenciada SQL do Azure.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Sintaxe para Fabric Data Warehouse, Azure Synapse Analytics e Analytics Platform System (PDW).
BEGIN { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL da Malha e Instância Gerenciada do SQL do Azure
O nome atribuído à transação.
transaction_name deve estar em conformidade com as regras para identificadores, mas identificadores com mais de 32 caracteres não são permitidos. Use nomes de transação somente no par externo de instruções ou BEGIN...COMMIT aninhadasBEGIN...ROLLBACK.
transaction_name sempre diferencia maiúsculas de minúsculas, mesmo quando a instância do SQL Server não diferencia maiúsculas de minúsculas.
@tran_name_variable
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL da Malha e Instância Gerenciada do SQL do Azure
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 MARCA [ 'descrição' ]
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL da Malha e Instância Gerenciada do SQL do Azure
Especifica que a transação está marcada no log.
description é uma cadeia de caracteres que descreve a marca. Uma descrição com mais de 128 caracteres é truncada para 128 caracteres antes de msdb.dbo.logmarkhistory ser armazenada na tabela.
Se WITH MARK for usado, um nome de transação deve ser especificado.
WITH MARK Permite restaurar um log de transações para uma marca nomeada.
Remarks
BEGIN TRANSACTION incrementos @@TRANCOUNT em 1.
BEGIN TRANSACTION representa um ponto no qual os dados referenciados por uma conexão são lógica e fisicamente consistentes. Se forem encontrados erros, todas as modificações de dados feitas após o BEGIN TRANSACTION podem ser revertidas para retornar os dados a esse estado conhecido de consistência. Cada transação dura até ser concluída sem erros e COMMIT TRANSACTION emitida para tornar as modificações uma parte permanente do banco de dados, ou erros são encontrados e todas as modificações são apagadas com uma ROLLBACK TRANSACTION instrução.
BEGIN TRANSACTION inicia uma transação local para a conexão que emite a instrução. Dependendo das configurações atuais do nível de isolamento da transação, muitos recursos adquiridos para dar suporte às instruções Transact-SQL emitidas pela conexão são bloqueados pela transação até que ela seja concluída com uma COMMIT TRANSACTION instrução ou ROLLBACK TRANSACTION . As transações deixadas pendentes por longos períodos de tempo podem impedir que outros usuários acessem esses recursos bloqueados e também podem impedir o truncamento de log.
Embora BEGIN TRANSACTION inicie uma transação local, ela não é registrada no log de transações até que o aplicativo execute uma ação que deve ser registrada no log, como executar uma INSERTinstrução , UPDATEou DELETE . Um aplicativo pode executar ações como adquirir bloqueios para proteger o nível de isolamento de transações de instruções, mas nada é registrado no log até que o aplicativo execute uma ação de SELECT modificação.
Nomear várias transações em uma série de transações aninhadas com um nome de transação tem pouco efeito sobre a transação. Apenas o nome da primeira transação (mais externa) é registrado no sistema. Uma reversão para qualquer outro nome (diferente de um nome de savepoint válido) gera um erro. Nenhuma das instruções executadas antes da reversão é, de fato, revertida no momento em que esse erro ocorre. As instruções são revertidas somente quando a transação externa é revertida.
A transação local iniciada pela BEGIN TRANSACTION instrução é escalada para uma transação distribuída se as seguintes ações forem executadas antes que a instrução seja confirmada ou revertida:
Uma
INSERTinstrução ,DELETEouUPDATEque faz referência a uma tabela remota em um servidor vinculado é executada. AINSERTinstrução ,UPDATE, orDELETEfalhará se o provedor OLE DB usado para acessar o servidor vinculado não oferecer suporte àITransactionJoininterface.Uma chamada é feita para um procedimento armazenado remoto quando a
REMOTE_PROC_TRANSACTIONSopção está definida comoON.
A cópia local do SQL Server torna-se o controlador de transações e usa o Microsoft Distributed Transaction Coordinator (MS DTC) para gerenciar a transação distribuída.
Uma transação pode ser explicitamente executada como uma transação distribuída usando BEGIN DISTRIBUTED TRANSACTION. Para obter mais informações, consulte BEGIN DISTRIBUTED TRANSACTION.
Quando SET IMPLICIT_TRANSACTIONS é definido como ON, uma BEGIN TRANSACTION instrução cria duas transações aninhadas. Para obter mais informações, consulte SET IMPLICIT_TRANSACTIONS.
Transações marcadas
A WITH MARK opção faz com que o nome da transação seja colocado no log de transações. Quando você restaura um banco de dados para um estado anterior, a transação marcada pode ser usada no lugar de uma data e hora. Para obter mais informações, consulte Usar transações marcadas para recuperar bancos de dados relacionados consistentemente e Instruções RESTORE.
Além disso, as marcas de log de transações são necessárias se você precisar recuperar um conjunto de bancos de dados relacionados para um estado logicamente consistente. As marcas podem ser colocadas nos logs de transações dos bancos de dados relacionados por uma transação distribuída. A recuperação do conjunto de bancos de dados relacionados a essas marcas resulta em um conjunto de bancos de dados que são transacionalmente consistentes. A colocação de marcas em bases de dados conexas requer procedimentos especiais.
A marca é colocada no log de transações somente se o banco de dados for atualizado pela transação marcada. As transações que não modificam dados não são marcadas.
BEGIN TRANSACTION <new_name> WITH MARK pode ser aninhado dentro de uma transação já existente que não está marcada. Ao fazer isso, <new_name> torna-se o nome da marca para a transação, apesar do nome que a transação já pode ter sido dada. No exemplo a seguir, M2 é o nome da marca.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
Ao aninhar transações, você recebe a seguinte mensagem de aviso se tentar marcar uma transação que já está marcada:
Server: Msg 3920, Level 16, State 1, Line 3
WITH MARK option only applies to the first BEGIN TRAN WITH MARK.
The option is ignored.
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. Usar uma transação explícita
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL do Fabric, Instância Gerenciada do SQL do Azure, Azure Synapse Analytics, PDW (Analytics Platform System)
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Reverter uma transação
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL do Fabric, Instância Gerenciada do SQL do Azure, Azure Synapse Analytics, PDW (Analytics Platform System)
O exemplo a seguir mostra o efeito de reverter uma transação. Neste exemplo, a ROLLBACK instrução reverte a INSERT instrução, mas a tabela criada ainda existe.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. Nomeie uma transação
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL da Malha, Instância Gerenciada do SQL do Azure
O exemplo a seguir mostra como nomear uma transação.
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
USE AdventureWorks2022;
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GO
D. Marcar uma transação
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, Banco de Dados SQL do Azure, Banco de Dados SQL da Malha, Instância Gerenciada do SQL do Azure
O exemplo a seguir mostra como marcar uma transação. A transação CandidateDelete é marcada.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2022;
GO
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO