Questão nº 77
Questão de Suporte · FGV DPGE-RJ 2014 (nº 77)
Observe o cabeçalho de um script de criação de uma stored procedure no MS SQL Server.
```sql
create procedure XPTO
@P1 varchar(10),
@P2 int=0,
@P3 varchar(50)=''
AS …
```
Sabendo-se que somente aspas simples foram digitadas, o comando de execução da referida procedure que está incorreto é
- Aexec xpto 'ABC', 10, ''
- Bexec xpto ,'10', '' (alternativa correta)
- Cexec xpto 'ABC', '10', ''
- Dexec xpto ''
- Eexec xpto @P1='ABC'
Resposta comentada
Gabarito Alternativa B
Ao executar uma stored procedure no SQL Server, você pode passar parâmetros por posição (na ordem em que foram declarados) ou por nome (especificando @NomeDoParametro = Valor). Parâmetros que possuem um valor padrão na declaração são opcionais e podem ser omitidos na execução, caso contrário, são obrigatórios.
- (A) Incorreta: Este comando está correto. Os parâmetros são passados por posição:
'ABC'para@P1(varchar),10para@P2(int) e''para@P3(varchar). Todos os tipos são compatíveis. - (B) Correta: Este comando está incorreto. Ao passar parâmetros por posição, não se pode simplesmente omitir um parâmetro obrigatório (como
@P1) usando apenas uma vírgula. O parâmetro@P1não tem valor padrão e, portanto, é obrigatório. A sintaxeexec xpto ,'10', ''implica que o primeiro parâmetro está ausente, o que é um erro para um parâmetro obrigatório sem valor padrão. - (C) Incorreta: Este comando está correto. Os parâmetros são passados por posição:
'ABC'para@P1(varchar),'10'para@P2(int) e''para@P3(varchar). O SQL Server realiza uma conversão implícita de'10'(string) para10(inteiro) para o parâmetro@P2, o que é permitido e bem-sucedido. A armadilha da banca aqui é fazer você pensar que passar uma string para um parâmetro inteiro é sempre um erro, mas o SQL Server é flexível com conversões implícitas válidas. - (D) Incorreta: Este comando está correto. Apenas o parâmetro
@P1é fornecido (''). Os parâmetros@P2e@P3são opcionais e assumem seus valores padrão (0 e'', respectivamente). - (E) Incorreta: Este comando está correto. O parâmetro
@P1é passado por nome (@P1='ABC'). Os parâmetros@P2e@P3são opcionais e assumem seus valores padrão (0 e'', respectivamente).
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Suporte (Caderno Tipo 1). Reproduzida para fins de estudo.