Pular para o conteúdo principal

Questão de Banco de Dados — SQL Server — FGV 2023

Banco de DadosSQL Server
Código
fg161263
Banca
FGV
Órgão
TJ SE
Ano
2023
Cargo
AJ ( )

Analise o script de uma stored procedure no âmbito do SQL Server.

 

CREATE PROCEDURE TESTE
       @CPF varchar(11),
       @Produdo varchar(12)
AS
        SELECT count(*) Contagem
        FROM VENDA
        WHERE CPF = @CPF
               AND CodProdudo = @Produdo;

 

Nesse contexto, considere as três hipóteses de comandos que invocam o procedimento armazenado TESTE.

 

I. EXECUTE TESTE '99999999900', '1000999';

 

II. EXEC TESTE @CPF = '99999999900', @Produdo = '1000999';

 

III. EXECUTE TESTE @CPF = '99999999900' and @Produdo = '1000999';

 

Está correto o que se apresenta em:

  1. Asomente I;
  2. Bsomente I e II;
  3. Csomente I e III;
  4. Dsomente II e III;
  5. EI, II e III.
Revelar gabarito e comentário

GabaritoB — somente I e II;

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”.

Stored Procedures no SQL Server: formas de invocação

Gabarito: letra B — estão corretas apenas as hipóteses I e II. No SQL Server, uma stored procedure pode ser executada com EXECUTE/EXEC seguido do nome e dos argumentos posicionais (I) ou com argumentos nomeados na forma @parametro = valor separados por vírgula (II). A hipótese III está incorreta porque usa a palavra and para separar os parâmetros, o que não é a sintaxe válida do T-SQL — o separador correto é a vírgula.

Uma stored procedure (procedimento armazenado) é um bloco de código SQL pré-compilado e armazenado no servidor de banco de dados, que encapsula tarefas repetitivas e aceita parâmetros de entrada. No SQL Server, a sintaxe de criação segue o padrão CREATE PROCEDURE nome @param1 tipo, @param2 tipo AS ..., e a execução pode ser feita de duas maneiras principais: posicional (passando os valores na ordem em que os parâmetros foram declarados) ou nomeada (explicitando @nome_parametro = valor).

A forma posicional é a mais direta: basta listar os valores na ordem correta, separados por vírgula, como em EXECUTE TESTE '99999999900', '1000999'. Já a forma nomeada é mais explícita e evita erros de ordem, pois associa cada valor ao parâmetro pelo nome, como em EXEC TESTE @CPF = '99999999900', @Produdo = '1000999'. Ambas são válidas e equivalentes em termos de resultado.

O erro da hipótese III está em usar and como separador: EXECUTE TESTE @CPF = '99999999900' and @Produdo = '1000999'. No T-SQL, o and é um operador lógico usado em expressões booleanas (como no WHERE), não um separador de argumentos. A sintaxe correta para separar parâmetros nomeados é sempre a vírgula. Essa é uma pegadinha clássica: o candidato que conhece SQL básico pode associar and à junção de condições e acabar marcando a alternativa errada.

Outro ponto que merece atenção: o comando EXEC é um atalho para EXECUTE — ambos são equivalentes no SQL Server. Portanto, a hipótese II, que usa EXEC, é tão válida quanto a I, que usa EXECUTE. A banca explora exatamente essa confusão entre a sintaxe de separação de parâmetros e o operador lógico and.

Hipótese

Comando

Sintaxe

Válido?

I

EXECUTE TESTE '99999999900', '1000999'

Posicional (valores na ordem, separados por vírgula)

✅ Sim

II

EXEC TESTE @CPF = '99999999900', @Produdo = '1000999'

Nomeada (@param = valor, separados por vírgula)

✅ Sim

III

EXECUTE TESTE @CPF = '99999999900' and @Produdo = '1000999'

Nomeada com and como separador

❌ Não

Invocação de procedure (T-SQL)
  • 1EXEC / EXECUTE
    • Posicional (I)
      • valores na ordem declarada
    • Nomeada (II)
      • @param = valor
      • separador: vírgula
  • 2Erro comum (III)
    • usa "and" como separador
    • and é operador lógico (WHERE)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que somente a hipótese I está correta. Isso ignora que a hipótese II também é válida: EXEC TESTE @CPF = '99999999900', @Produdo = '1000999' usa a sintaxe nomeada, perfeitamente aceita pelo SQL Server. A forma nomeada é até mais recomendada por tornar o código mais legível e menos propenso a erros de ordem.

Alternativa B — ✅ Correta ⟵ GABARITO

As hipóteses I e II estão corretas. A I usa EXECUTE com argumentos posicionais, e a II usa EXEC (equivalente a EXECUTE) com argumentos nomeados — ambas são sintaxes válidas para invocar a procedure TESTE. A III está incorreta porque usa and como separador, o que não é permitido.

Alternativa C — ❌ Incorreta

Afirma que estão corretas somente I e III. A hipótese III está errada: EXECUTE TESTE @CPF = '99999999900' and @Produdo = '1000999' não é uma sintaxe válida. O and não separa parâmetros em T-SQL; o separador correto é a vírgula. Portanto, a combinação I e III não pode ser o gabarito.

Alternativa D — ❌ Incorreta

Afirma que estão corretas somente II e III. A hipótese III é inválida pelo mesmo motivo: o uso de and como separador de parâmetros. A II está correta, mas a III não, então a combinação II e III está errada.

Alternativa E — ❌ Incorreta

Afirma que I, II e III estão corretas. Isso só seria verdade se a III fosse válida, mas ela não é: and não é o separador de parâmetros no SQL Server. Apenas I e II estão corretas.

NÃO CAIA NESSA!

A banca troca o separador de parâmetros pelo operador lógico and. No SQL, and é usado para combinar condições no WHERE (ex.: WHERE CPF = @CPF AND CodProdudo = @Produdo), mas na chamada de uma procedure os argumentos são separados por vírgula. Quem confunde os dois contextos marca a alternativa E ou C. Fique atento: na invocação, sempre vírgula; na condição, sempre and.

PEGA ESSA DICA!

Para memorizar, pense: "na chamada, separo com vírgula; na condição, combino com AND". Na prova, ao ver uma chamada de procedure com and entre parâmetros, marque como inválida sem hesitar. E lembre-se: EXEC e EXECUTE são sinônimos — a presença de um ou de outro não torna a chamada errada.

Gabarito: letra B

Link permanente: /questoes/fg161263