Pular para o conteúdo principal

Questão de Banco de Dados — SQL Server — FCC 2026

Banco de DadosSQL Server
Código
fc142173
Banca
FCC
Órgão
SCGE PE
Ano
2026
Cargo
Ges Gov ( )

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 é:

  1. AIF @@ERROR <> O ROLLBACK TRANSACTION;
  2. BSET TRANSACTION ISCLATION LEVEL READ UNCOMMITTED;
  3. CSAVE TRANSACTION AjusteValores BEFORE ROLLEACK;
  4. DCHECKPOINT;
  5. EALTER DATABASE SET SINGLE_USER;
Revelar gabarito e comentário

GabaritoA — IF @@ERROR <> O ROLLBACK TRANSACTION;

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.

  1. 1BEGIN TRANSACTION
  2. 2UPDATE (despesas +5%)
  3. 3IF @@ERROR <> 0
  4. 4ROLLBACK (desfaz tudo)
  5. 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.

Gabarito: letra A

Link permanente: /questoes/fc142173