A SCGE precisa garantir que atualizações financeiras feitas na tabela Lancamentos sejam consistentes mesmo em caso de falhas no sistema. Para isso, um Gestor de Controle Interno criou o script abaixo no MS SQL Server, instalado e funcionando em condições ideais. A tabela Lancamentos possui os campos 1d (INT), Descricao (VARCHAR(100)), Tipo (VARCHAR(20), que pode ser Despesa OU Receita) e valor (DECIMAL(10,2)).
BEGIN TRANSACTION
UPDATE Lancamentos SET Valor = Valor * 1.05 WHERE Tipo = 'Despesa';
__ I ____
comMIT;
O objetivo é garantir que, caso ocorra qualquer erro durante a transação, nenhuma linha seja alterada permanentemente e a base de dados volte ao estado anterior. Para isso, o comando que deve preencher corretamente a lacuna 1 é:
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Transações no SQL Server: ROLLBACK e controle de erros
Gabarito: letra A. Para garantir que, em caso de erro, nenhuma linha seja alterada permanentemente, o comando que deve preencher a lacuna é IF @@ERROR <> 0 ROLLBACK TRANSACTION; — essa estrutura verifica se a instrução anterior gerou erro (código diferente de zero) e, se sim, desfaz a transação, revertendo o banco ao estado anterior. As demais alternativas tratam de isolamento, savepoint, checkpoint e modo de acesso, que não cumprem o objetivo de reverter a transação em caso de falha.
O controle de transações é um dos pilares da confiabilidade de um banco de dados. Uma transação é uma sequência de operações executadas como uma unidade lógica: ou todas são aplicadas (COMMIT) ou nenhuma é aplicada (ROLLBACK). No SQL Server, o comando @@ERROR é uma função de sistema que retorna o código de erro da última instrução T-SQL executada — se for 0, não houve erro; se for diferente de 0, houve falha. A combinação IF @@ERROR <> 0 ROLLBACK TRANSACTION é a forma clássica de verificar erros e reverter a transação, garantindo a atomicidade.
A atomicidade é a propriedade que assegura que uma transação é indivisível: ou todas as operações são confirmadas, ou todas são desfeitas. No script do enunciado, o UPDATE aumenta em 5% o valor das despesas. Se ocorrer qualquer erro nessa instrução (por exemplo, violação de constraint, estouro de capacidade do DECIMAL, bloqueio, etc.), o @@ERROR capturará o código do erro e o ROLLBACK desfará a alteração, devolvendo a tabela ao estado anterior. Sem essa verificação, o COMMIT seria executado mesmo com erro, gravando parcialmente as alterações — exatamente o que o gestor quer evitar.
Na prática, o script completo ficaria assim:
BEGIN TRANSACTION
UPDATE Lancamentos SET Valor = Valor * 1.05 WHERE Tipo = 'Despesa';
IF @@ERROR <> 0 ROLLBACK TRANSACTION;
COMMIT;
Se o UPDATE for bem-sucedido, @@ERROR retorna 0, a condição é falsa, e o COMMIT confirma a alteração. Se houver erro, @@ERROR retorna um número diferente de 0, o ROLLBACK é executado e a transação é desfeita — o COMMIT nem chega a ser executado, pois o fluxo já saiu do bloco.
É importante distinguir os comandos envolvidos:
Comando
Função
Efeito em caso de erro
COMMIT
Finaliza a transação e grava as alterações
Não desfaz nada
ROLLBACK
Desfaz a transação, revertendo ao estado anterior
Reverte tudo
SAVE TRANSACTION
Cria um ponto de salvamento intermediário
Permite reverter até o ponto, sem encerrar a transação
CHECKPOINT
Grava páginas sujas do log no disco
Não tem relação com reversão
SET TRANSACTION ISOLATION LEVEL
Define o nível de isolamento da transação
Não desfaz alterações
A pegadinha da banca está em oferecer alternativas que parecem relacionadas a transações, mas que não cumprem o objetivo de reverter em caso de erro. O candidato que conhece apenas os nomes dos comandos, sem saber a função exata, pode se confundir. A chave é lembrar que ROLLBACK é o único comando que desfaz alterações, e que @@ERROR é a forma de detectar o erro para acioná-lo.
Guarde a distinção central: COMMIT confirma, ROLLBACK desfaz, e @@ERROR é o sensor que decide qual caminho seguir. É exatamente essa lógica que separa a alternativa correta das demais.
1BEGIN TRANSACTION
2UPDATE (despesas +5%)
3IF @@ERROR <> 0
4ROLLBACK (desfaz tudo)
5COMMIT (confirma)
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa A está correta porque IF @@ERROR <> 0 ROLLBACK TRANSACTION; verifica se a instrução UPDATE anterior gerou erro (código diferente de zero) e, em caso positivo, desfaz a transação. Isso garante a atomicidade: se qualquer erro ocorrer, nenhuma linha é alterada permanentemente, e o banco volta ao estado anterior. O @@ERROR é uma função do SQL Server que retorna o código do último erro; 0 significa sucesso, qualquer outro valor indica falha. Essa é a estrutura clássica de controle de erros em transações T-SQL.
Alternativa B — ❌ Incorreta
A alternativa B está incorreta porque SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; define o nível de isolamento da transação, permitindo leituras sujas (dados não confirmados). Isso não tem relação com reverter alterações em caso de erro — o isolamento trata da concorrência entre transações, não da atomicidade. O comando não desfaz nada e não impede que o COMMIT seja executado mesmo com erro.
Alternativa C — ❌ Incorreta
A alternativa C está incorreta porque SAVE TRANSACTION AjusteValores BEFORE ROLLBACK; não é uma sintaxe válida. O comando correto seria SAVE TRANSACTION AjusteValores; (sem o BEFORE ROLLBACK), que cria um ponto de salvamento. Além disso, um savepoint não desfaz a transação inteira — ele permite reverter apenas até aquele ponto, mantendo a transação aberta. O objetivo do enunciado é reverter tudo em caso de erro, o que exige ROLLBACK TRANSACTION, não um savepoint.
Alternativa D — ❌ Incorreta
A alternativa D está incorreta porque CHECKPOINT; é um comando que força a gravação das páginas sujas do log de transações no disco. Ele não desfaz alterações e não tem relação com o controle de erros em transações. O checkpoint é uma operação de recuperação e desempenho, não de reversão.
Alternativa E — ❌ Incorreta
A alternativa E está incorreta porque ALTER DATABASE SET SINGLE_USER; coloca o banco de dados em modo de usuário único, impedindo que outros usuários acessem. Isso não desfaz alterações e não trata erros de transação. O comando é usado para manutenção, não para controle de atomicidade.
NÃO CAIA NESSA!
A banca mistura comandos que parecem relacionados a transações, mas que têm funções completamente diferentes. O candidato que decora nomes sem entender a função pode cair na alternativa C (savepoint) ou D (checkpoint). A chave é lembrar: ROLLBACK é o único que desfaz, e @@ERROR é o sensor que detecta a falha. Com treino, você identifica essa troca de longe 💪
PEGA ESSA DICA!
Para questões de transação, monte um mapa mental: BEGIN TRANSACTION abre, COMMIT confirma, ROLLBACK desfaz, SAVE TRANSACTION marca um ponto intermediário, @@ERROR detecta erro. Na prova, pergunte-se: "o que este comando faz com as alterações?" — se não desfaz, não é a resposta para reverter.