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
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. Você pode usar ROLLBACK TRANSACTION para apagar todas as modificações de dados feitas desde o início da transação ou para um ponto de salvamento. Também libera recursos detidos pela transação.
A reversão de uma transação não inclui alterações feitas em variáveis locais ou variáveis de tabela. Essas alterações não são apagadas por esta declaração.
Transact-SQL convenções de sintaxe
Syntax
Sintaxe para SQL Server, Banco de Dados SQL do Azure e Banco de Dados SQL de Malha.
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
O nome atribuído à transação em 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 você aninha transações, transaction_name deve ser o nome da instrução mais BEGIN TRANSACTION externa.
transaction_name 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
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 uma reversão condicional deve afetar apenas parte da transaçã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 .
RAISERROR é a declaração preferida para indicar erros.
Remarks
ROLLBACK TRANSACTION sem um savepoint_name ou transaction_name reverte para o início da transação. Quando você aninha transações, 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_name>não diminui.@@TRANCOUNT
ROLLBACK TRANSACTION não é possível fazer referência a um savepoint_name em transações distribuídas iniciadas explicitamente com BEGIN DISTRIBUTED TRANSACTION ou escaladas a partir de uma transação local.
Uma transação não pode ser revertida depois que uma COMMIT TRANSACTION instrução é executada, exceto quando a está associada a COMMIT TRANSACTION uma transação aninhada contida na transação que está sendo revertida. Nesse caso, a transação aninhada é revertida, mesmo que você tenha emitido um COMMIT TRANSACTION 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.
Interoperability
Em procedimentos armazenados, ROLLBACK TRANSACTION instruções sem savepoint_name ou transaction_name reverter todas as instruções para o mais BEGIN TRANSACTIONexterno. Uma ROLLBACK TRANSACTION instrução em um procedimento armazenado que faz com @@TRANCOUNT que tenha um valor diferente quando o procedimento armazenado é concluído do que o @@TRANCOUNT valor quando o procedimento armazenado foi chamado 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 aninhada implícita.)
ROLLBACK TRANSACTION instruções em procedimentos armazenados não afetam instruções subsequentes no lote que chamou o procedimento; instruções subsequentes no lote são executadas.
ROLLBACK TRANSACTION declarações em gatilhos encerram o lote contendo a declaração que disparou o gatilho; instruções subsequentes no lote não são executadas.
O efeito de a ROLLBACK nos cursores é definido por estas três regras:
Com
CURSOR_CLOSE_ON_COMMITsetON,ROLLBACKfecha, mas não desaloca todos os cursores abertos.Com
CURSOR_CLOSE_ON_COMMITo conjuntoOFF,ROLLBACKnão afeta nenhum síncronoSTATICINSENSITIVEaberto, cursores ou cursores assíncronosSTATICque foram totalmente preenchidos. Os cursores abertos de qualquer outro tipo são fechados, mas não deslocalizados.Um erro que encerra um lote e gera uma reversão interna deslocaliza todos os cursores que foram declarados no lote que contém a instrução de erro. Todos os cursores são desalocados independentemente do seu tipo ou da configuração de
CURSOR_CLOSE_ON_COMMIT. Isso inclui cursores declarados em procedimentos armazenados chamados pelo lote de erro. Os cursores declarados em um lote antes do lote de erro estão sujeitos às duas primeiras regras. Um erro de bloqueio é um exemplo desse tipo de erro. UmaROLLBACKinstrução emitida em um gatilho também gera automaticamente esse tipo de erro.
Comportamento de bloqueio
Uma ROLLBACK TRANSACTION instrução especificando um savepoint_name libera todos os bloqueios adquiridos além do ponto de salvamento, exceto escaladas e conversões. Esses bloqueios não são liberados e não são convertidos de volta para o modo de bloqueio anterior.
Permissions
Requer adesão à função pública de .
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;
GO
CREATE TABLE ValueTable ([value] INT);
GO
DECLARE @TransactionName 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