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
Essa instrução reverte uma transação explícita ou implícita para o início da transação ou para um ponto de salvamento dentro da transação. Você usa ROLLBACK TRANSACTION para apagar todas as modificações de dados feitas desde o início da transação ou de um ponto de salvamento.
ROLLBACK TRANSACTION também libera os recursos mantidos pela transação.
As alterações feitas em variáveis locais ou variáveis de tabela não são apagadas por essa instrução.
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.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Sintaxe do Fabric Data Warehouse, do Azure Synapse Analytics e do Parallel Data Warehouse Database.
ROLLBACK { 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.
O nome atribuído à transação com BEGIN TRANSACTION.
transaction_name precisa estar em conformidade com as regras para identificadores, mas somente os primeiros 32 caracteres do nome da transação são usados. Quando há transações internas, transaction_name deve ser o nome da instrução mais BEGIN TRANSACTION externa.
transaction_name sempre diferencia maiúsculas de minúsculas, mesmo quando a instância do Mecanismo de Banco de Dados 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, 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.
savepoint_name
savepoint_name de uma SAVE TRANSACTION declaração.
savepoint_name precisa estar em conformidade com as regras para identificadores. Use savepoint_name quando uma reversão deve afetar apenas a parte da transação após o ponto de salvamento.
@savepoint_variable
O nome de uma variável definida pelo usuário que contém um nome de ponto de salvamento válido. A variável precisa ser declarada com o tipo de dados char, varchar, nchar ou nvarchar.
Tratamento de erros
Uma ROLLBACK TRANSACTION instrução não produz nenhuma mensagem para o usuário. Se forem necessários avisos em procedimentos armazenados ou gatilhos, use as RAISERROR instruções or PRINT .
Remarks
ROLLBACK TRANSACTION sem um savepoint_name ou transaction_name reverte para o início da transação. Quando há transações internas, essa mesma instrução reverte todas as transações internas para a instrução mais BEGIN TRANSACTION externa. Em ambos os casos, ROLLBACK TRANSACTION diminui a função do @@TRANCOUNT sistema para 0.
ROLLBACK TRANSACTION savepoint_namenão diminui.@@TRANCOUNT
ROLLBACK TRANSACTION não pode referenciar um savepoint_name em transações distribuídas iniciadas explicitamente com BEGIN DISTRIBUTED TRANSACTION ou promovidas de uma transação local.
Uma transação não pode ser revertida depois que uma COMMIT TRANSACTION instrução é executada, exceto quando ela COMMIT TRANSACTION está associada a uma transação interna contida na transação que está sendo revertida. Nesse caso, a transação interna é revertida, mesmo que você tenha emitido um COMMIT TRANSACTION para ela.
Em uma transação, nomes de ponto de salvamento duplicados são permitidos, mas o ROLLBACK TRANSACTION uso do nome do ponto de salvamento duplicado reverte apenas para o mais recente SAVE TRANSACTION usando esse nome de ponto de salvamento.
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 .
Interoperability
Em procedimentos armazenados, uma ROLLBACK TRANSACTION instrução sem um savepoint_name ou transaction_name reverte todas as instruções para a parte externa BEGIN TRANSACTION. Uma ROLLBACK TRANSACTION instrução em um procedimento armazenado que faz @@TRANCOUNT com que um valor diferente na conclusão do procedimento do que o valor no início do procedimento produza uma mensagem informativa. Essa mensagem não afeta o processamento subsequente.
Se a ROLLBACK TRANSACTION for emitido em um gatilho:
Todas as modificações de dados feitas até aquele ponto na transação atual serão revertidas, incluindo qualquer uma feita pelo disparador.
O gatilho continua executando todas as instruções restantes após a
ROLLBACKinstrução. Se alguma dessas instruções modificar dados, as modificações não serão revertidas. Nenhum disparador aninhado é ativado pela execução dessas instruções restantes.As instruções no lote após a instrução que disparou o gatilho não são executadas.
@@TRANCOUNT é incrementado em um ao inserir um gatilho, mesmo quando no modo de confirmação automática. O sistema trata um gatilho como uma transação interna implícita.
Uma ROLLBACK TRANSACTION instrução em um procedimento armazenado não afeta as instruções subsequentes no lote que chamou o procedimento. Instruções subsequentes no lote são executadas.
Uma ROLLBACK TRANSACTION instrução em um gatilho encerra o lote que contém a instrução que disparou o gatilho. As instruções subsequentes no lote não são executadas.
O efeito de um ROLLBACK cursor é definido pelas seguintes regras:
Com
CURSOR_CLOSE_ON_COMMITdefinido comoON,ROLLBACKfecha, mas não desaloca todos os cursores abertos.Com
CURSOR_CLOSE_ON_COMMITdefinido comoOFF,ROLLBACKnão afeta nenhum cursor síncronoSTATICaberto ouINSENSITIVEcursors ou cursores assíncronosSTATICque são totalmente preenchidos. Cursores abertos de qualquer outro tipo são fechados, mas não desalocados.Um erro que encerra um lote e reverte a transação desaloca todos os cursores que foram declarados no lote que contém a instrução que produz o erro. Todos os cursores são desalocados, independentemente do tipo ou da configuração de
CURSOR_CLOSE_ON_COMMIT. Isso inclui cursores declarados em procedimentos armazenados chamados pelo lote que produz o erro. Os cursores declarados em um lote antes do lote produzir o erro estão sujeitos às duas regras anteriores.Um deadlock é um exemplo desse tipo de erro. Uma
ROLLBACKinstrução emitida em um gatilho também resulta nesse comportamento.
Comportamento de bloqueio
Uma ROLLBACK TRANSACTION instrução que especifica um savepoint_name libera todos os bloqueios adquiridos além do ponto de salvamento, exceto para bloqueios escalonados e convertidos. Esses bloqueios não são liberados e não são convertidos de volta para o modo de bloqueio anterior.
Permissions
Exige a associação à função public.
Examples
O exemplo a seguir mostra o efeito da reversão de uma transação nomeada. Depois de criar uma tabela, as instruções a seguir iniciam uma transação nomeada, inserem duas linhas e revertem a transação nomeada na variável @TransactionName. Outra instrução fora da transação nomeada insere duas linhas. A consulta retorna os resultados das instruções anteriores.
USE tempdb;
CREATE TABLE ValueTable
(
value INT
);
DECLARE @TransactionName AS VARCHAR (20) = 'Transaction1';
BEGIN TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (1), (2);
ROLLBACK TRANSACTION @TransactionName;
INSERT INTO ValueTable
VALUES (3), (4);
SELECT [value]
FROM ValueTable;
DROP TABLE ValueTable;
Veja a seguir o conjunto de resultados.
value
-----
3
4