Questão de Banco de Dados — SQL Server — VUNESP 2024
- Código
- vu212086
- Banca
- VUNESP
- Órgão
- Pref Osasco
- Ano
- 2024
- Cargo
- Ana ( )
- Ainicial e final.
- Bsimples e composto.
- Cindexado e composto.
- Destático e keyset.
- Ede inserção e de exclusão.
GabaritoD — estático e keyset.
Gabarito: letra D. O MS SQL Server 2022 suporta quatro tipos de cursor: estático, keyset, dinâmico e somente avanço (forward-only). A alternativa D traz exatamente dois deles — estático e keyset —, sendo a única que nomeia tipos reais de cursor do SQL Server.
Cursor é um mecanismo do banco de dados que permite percorrer linha a linha o resultado de uma consulta, como se fosse um ponteiro sobre um conjunto de registros. Diferente do SQL tradicional, que opera sobre conjuntos inteiros (SELECT, UPDATE, DELETE), o cursor permite processamento iterativo, linha por linha, útil em lógicas que exigem decisões ou cálculos por registro. No SQL Server, os cursores podem ser declarados no T-SQL (DECLARE CURSOR) ou usados em procedimentos armazenados, e a escolha do tipo define como o cursor enxerga os dados: se vê uma fotografia do momento da abertura, se acompanha alterações, se permite atualizações, etc.
Os quatro tipos de cursor do SQL Server são:
Estático (STATIC): cria uma cópia temporária (snapshot) dos dados no momento em que o cursor é aberto. Alterações feitas por outras sessões (ou até pela própria sessão) após a abertura não são refletidas no cursor. É o tipo mais "congelado" — ideal quando se quer uma visão consistente e imutável.
Keyset (KEYSET): determina a associação das linhas no momento da abertura, usando um conjunto de chaves. As linhas já selecionadas permanecem visíveis, mas valores podem ser atualizados por outras sessões (o cursor reflete mudanças de dados, mas não a inclusão de novas linhas que satisfaçam a condição). É um meio-termo entre o estático e o dinâmico.
Dinâmico (DYNAMIC): reflete todas as alterações feitas por outras sessões — inclusões, exclusões e atualizações — enquanto o cursor está aberto. É o mais "vivo", porém o mais custoso.
Somente avanço (FAST_FORWARD / FORWARD_ONLY): permite apenas percorrer as linhas para frente, sem voltar. É o mais rápido e eficiente para leituras sequenciais simples.
A banca explora justamente a confusão entre esses nomes técnicos e termos genéricos ou de outras áreas. As alternativas A, B, C e E trazem pares que não correspondem a nenhum tipo de cursor do SQL Server — são invenções ou termos de outros contextos (como "inicial/final", "simples/composto", "indexado/composto", "inserção/exclusão"). A única que cita dois tipos reais é a D.
Para fixar, associe cada tipo ao comportamento: estático = fotografia (não vê mudanças); keyset = vê mudanças de valores, mas não vê linhas novas; dinâmico = vê tudo; forward-only = só para frente. Na prova, desconfie de pares que parecem lógicos mas não existem na documentação — a banca adora inventar nomes plausíveis.
"Inicial e final" não são tipos de cursor no SQL Server. Não existe cursor "inicial" nem "final" — esses termos não aparecem na documentação de cursores. A banca tenta confundir com a ideia de posição (primeira/última linha), mas isso é apenas navegação dentro de um cursor, não um tipo.
"Simples e composto" não são tipos de cursor. Não há essa classificação na documentação do SQL Server. O termo "composto" pode lembrar índices compostos ou chaves compostas, mas não se aplica a cursores.
"Indexado e composto" também não são tipos de cursor. "Indexado" remete a índices de tabela, e "composto" a chaves/índices com múltiplas colunas — nada a ver com cursores. O SQL Server não define cursores "indexados" ou "compostos".
"Estático e keyset" são, de fato, dois dos quatro tipos de cursor suportados pelo SQL Server. O cursor estático cria uma cópia temporária dos dados (snapshot), ignorando alterações posteriores; o cursor keyset fixa o conjunto de linhas por chaves, mas reflete atualizações de valores. Ambos são documentados oficialmente.
"De inserção e de exclusão" não são tipos de cursor. Esses termos lembram operações DML (INSERT/DELETE) ou gatilhos (triggers de inserção/exclusão), mas não existem cursores com esses nomes no SQL Server.
Gabarito: letra D — os tipos de cursor do SQL Server são estático, keyset, dinâmico e somente avanço.
Link permanente: /questoes/vu212086