1
resposta

[Bug] 06 Visualizando os valores das variáveis

Estou tendo mensagem de erro durante a execução parcial. Se executo as linhas do DECLARE a mensagem é de que tudo deu certo:

DECLARE @Cliente VARCHAR(50), @Idade INT, @Data_Nasc DATE, @Custo FLOAT;
Commands completed successfully.

Se então executo as linhas de SET recebo mensagem de erro:

SET @Cliente = 'João';
SET @Idade = 10;
SET @Data_Nasc = '20070110';
SET @Custo = 10.23;
Msg 137, Level 15, State 1, Line 8
É necessário declarar a variável escalar "@Cliente".
Msg 137, Level 15, State 1, Line 9
É necessário declarar a variável escalar "@Idade".
Msg 137, Level 15, State 1, Line 10
É necessário declarar a variável escalar "@Data_Nasc".
Msg 137, Level 15, State 1, Line 11
É necessário declarar a variável escalar "@Custo".

Mas se executo junto, a mensagem é positiva:

Commands completed successfully.

Quando incluo o print no todo, ele imprime na tela as informações:

João
10
2007-01-10
10.23

Mas se tento o print solzinho de uma ou mais variáveis, recebo erro de novo:

Msg 137, Level 15, State 2, Line 12
É necessário declarar a variável escalar "@Cliente".
Msg 137, Level 15, State 2, Line 13
É necessário declarar a variável escalar "@Idade".
Msg 137, Level 15, State 2, Line 14
É necessário declarar a variável escalar "@Data_Nasc".
Msg 137, Level 15, State 2, Line 15
É necessário declarar a variável escalar "@Custo".

Estou sem entender. Se não posso printar uma variável sozinha em qualquer momento, de que ela me serve? Se eu tenho que executar tudo junto o tempo todo para funcionar, onde está a praticidade? O que está acontecendo?

1 resposta

Oi Mariana, tudo bem?

Esse comportamento tem a ver com o escopo das variáveis declaradas no SQL Server. No SQL Server, as variáveis existem apenas dentro do bloco de código em que elas são declaradas e usadas. Quando você executa o código em seções separadas, as variáveis perdem o escopo e precisam ser declaradas novamente.

Cada vez que você executa um comando, se você não estiver rodando tudo em um único bloco de instruções, o SSMS trata isso como execuções independentes. Assim, na segunda execução (quando você está apenas rodando as linhas SET ou PRINT), o SQL Server já não tem mais conhecimento das variáveis declaradas anteriormente, porque elas pertencem ao escopo de uma execução anterior.

As variáveis são práticas em blocos maiores de código, como em procedures, loops ou quando você precisa realizar operações complexas dentro de uma única execução. Em cenários onde o código precisa ser dividido, como durante a depuração, é comum executar blocos inteiros para garantir o escopo correto.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado