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
Esta 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. Usa ROLLBACK TRANSACTION para apagar todas as modificações de dados feitas desde o início da transação ou de um ponto de gravação.
ROLLBACK TRANSACTION também liberta os recursos detidos pela transação.
As alterações feitas a variáveis locais ou de tabela não são apagadas por esta afirmação.
Transact-SQL convenções de sintaxe
Syntax
Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database no Microsoft Fabric.
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[ ; ]
Sintaxe do Fabric Data Warehouse, Azure Synapse Analytics e Parallel Data Warehouse Database.
ROLLBACK { 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.
O nome atribuído à transação com BEGIN TRANSACTION.
transaction_name deve estar em conformidade com as regras para identificadores, mas apenas 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 sensível a maiúsculas e minúsculas, mesmo quando a instância do Motor de Base de Dados não é sensível a maiúsculas e minúsculas.
@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 .
savepoint_name
savepoint_name de uma SAVE TRANSACTION declaração.
savepoint_name devem estar em conformidade com as regras relativas aos identificadores. Use savepoint_name quando um rollback deve afetar apenas a parte da transação após o ponto de gravação.
@savepoint_variable
O nome de uma variável definida pelo usuário que contém um nome de savepoint válido. A variável deve ser declarada com um tipo de dados char, varchar, nchar ou nvarchar .
Tratamento de erros
Uma ROLLBACK TRANSACTION instrução não produz mensagens 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, esta 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 se pode referenciar uma savepoint_name em transações distribuídas iniciadas explicitamente ou BEGIN DISTRIBUTED TRANSACTION promovidas a partir de uma transação local.
Uma transação não pode ser revertida após a execução de uma COMMIT TRANSACTION instrução, exceto quando está associada COMMIT TRANSACTION a uma transação interna contida na transação que está a ser revertida. Neste caso, a transação interna é revertida, mesmo que tenha emitido um COMMIT TRANSACTION pedido para ela.
Em uma transação, nomes de savepoint duplicados são permitidos, mas o ROLLBACK TRANSACTION uso do nome de savepoint duplicado reverte apenas para o mais recente SAVE TRANSACTION usando esse nome de savepoint.
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.
Interoperability
Em procedimentos armazenados, uma ROLLBACK TRANSACTION instrução sem savepoint_name ou transaction_name reverte todas as instruções para o mais BEGIN TRANSACTIONexterno . Uma ROLLBACK TRANSACTION instrução num procedimento armazenado que faz @@TRANCOUNT com que tenha um valor diferente na conclusão do procedimento do que o valor no início do procedimento produz uma mensagem informativa. Esta mensagem não afeta o processamento subsequente.
Se um ROLLBACK TRANSACTION for emitido em um gatilho:
Todas as modificações de dados feitas até esse ponto na transação atual são revertidas, incluindo as feitas pelo gatilho.
O gatilho continua executando todas as instruções restantes após a
ROLLBACKinstrução. Se qualquer uma dessas instruções modificar dados, as modificações não serão revertidas. Nenhum gatilho aninhado é acionado 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 por 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 instrução num procedimento armazenado não afeta as instruções subsequentes no lote que chamou ROLLBACK TRANSACTION o procedimento. As instruções subsequentes do lote são executadas.
Uma ROLLBACK TRANSACTION instrução num trigger termina o lote que contém a instrução que disparou o trigger. As declarações subsequentes no lote não são executadas.
O efeito de a ROLLBACK nos cursores é definido pelas seguintes regras:
Com
CURSOR_CLOSE_ON_COMMITdefinido paraON,ROLLBACKfecha mas não desloca todos os cursores abertos.Com definido
CURSOR_CLOSE_ON_COMMITparaOFF,ROLLBACKnão afeta nenhum aberto síncronoSTATIC,INSENSITIVEnem cursores, nem cursores assíncronosSTATICque estejam totalmente preenchidos. Os cursores abertos de qualquer outro tipo são fechados, mas não deslocalizados.Um erro que termina um lote e reverte a transação desaloca todos os cursores que foram declarados no lote que contém a instrução que gera o erro. Todos os cursores são desalocados independentemente do seu tipo ou da configuração de
CURSOR_CLOSE_ON_COMMIT. Isto inclui cursores declarados em procedimentos armazenados chamados pelo lote que produz o erro. Os cursores declarados num lote antes do lote que produz o erro estão sujeitos às duas regras anteriores.Um impasse é um exemplo deste tipo de erro. Uma declaração emitida
ROLLBACKnum gatilho também resulta neste comportamento.
Comportamento de bloqueio
Uma ROLLBACK TRANSACTION declaração que especifica um savepoint_name liberta quaisquer bloqueios adquiridos para além do ponto de gravação, exceto os bloqueios escalados e convertidos. Esses bloqueios não são liberados e não são convertidos de volta para o modo de bloqueio anterior.
Permissions
Requer associação à public função.
Examples
O exemplo a seguir mostra o efeito de reverter 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;
Aqui está o conjunto de resultados.
value
-----
3
4