Em geral, o IF…ELSE é uma instrução de tomada de decisão em várias linguagens de programação. A instrução IF é utilizada para executar um bloco de código se uma condição for satisfeita. Se uma condição não for satisfeita (FALSE) então opcionalmente a instrução ELSE pode ser usada.
No caso do SQL Server, a instrução IF é usada para executar instruções SQL se uma condição for VERDADEIRA.
Por exemplo:
1
2
3
4
5
6
7
|
SE @nome_da_tabela = ’empregados’
SELECCIONAR * DE sto_employees;
ELSE
SELECT * FROM sto_products;
|
No código acima, o @nome_da_mesa é uma variável. Se um valor atribuído a essa variável for “empregados”, a instrução IF recuperará os dados da tabela sto_employees. Se o valor da variável for qualquer outro que não seja “empregado”, a condição IF torna-se FALSO e a parte ELSE será executada.
I mostrará esta simples utilização nos exemplos abaixo com saída. Na última seção, eu também explicarei como preencher o propósito “ELSE IF” que não está disponível no SQL Server.
Um exemplo simples de uso da instrução IF sem ELSE
Deixe-me começar com um exemplo simples de uso da instrução IF SQL. Vamos avaliar uma variável do tipo int para verificar o seu valor. Se a condição for VERDADEIRA, a instrução IF deve imprimir uma instrução.
O código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*Declarando uma variável*/
DECLARE @val_chk INT;
/* Atribuição de um valye*/
SET @val_chk = 101;
/*Executar a declaração IF*/
IF @val_chk = 101
PRINT ‘A declaração IF é VERDADEIRA’;
GO
|
A saída do código acima é:
“A declaração IF é VERDADEIRA”
Como tal o valor da variável é 101.
E se a condição fosse FALSA?
Se a condição acima fosse FALSA, por exemplo, o valor da variável fosse diferente de 101, então nada aconteceria.
No cenário real, você pode querer executar uma instrução ou executar alguma ação, pois a condição na instrução IF é VERDADEIRA ou FALSA.
Para isso, use a instrução ELSE. A expressão dentro da instrução ELSE será executada se a condição na instrução IF não for satisfeita.
Veja uma demonstração abaixo do uso da instrução ELSE:
O CÓDIGO IF ELSE:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Declarando uma variável*/
DECLARE @val_chk INT;
/* Atribuição de um valye*/
SET @val_chk = 50;
/*Executar a declaração IF*/
IF @val_chk >= 101
PRINT ‘A declaração IF é VERDADEIRA’;
ELSE
PRINT ‘A instrução IF é FLASE’;
GO
|
A saída do código acima é “A instrução IF é FALSA” pois o valor da variável não é maior ou igual a 101,
Executar uma instrução SELECT baseada no valor VARCHAR
Agora, deixe-me mostrar um exemplo de uso de um valor de string na instrução IF. Uma variável string é declarada e atribuída a um valor.
Na instrução IF…ELSE, vamos verificar o valor da variável e executar a respectiva instrução SELECT. Dê uma olhada:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/*Declarando uma variável de string*/
DECLARE @table_name VARCHAR(60);
/* Atribuição de um valor*/
SET @table_name = ’empregados’;
/*Executar a declaração IF*/
IF @table_name = ’empregados’
SELECT * FROM sto_employees;
ELSE
SELECT * FROM sto_products;
GO
|
>
A saída do código acima é:
E se tivermos várias opções para verificar? (NESTED IF)
Em exemplos acima, nós tínhamos apenas duas opções. Ou o valor é VERDADEIRO ou FALSO. Se VERDADEIRO, a instrução dentro do IF executa, caso contrário, a parte ELSE executa.
No caso de executar instruções SELECT, digamos que precisamos verificar diferentes nomes de tabela e executar a respectiva instrução SELECT para cada; então como podemos fazer isso?
A resposta está usando a instrução NESTED IF.
Por exemplo, se o valor da variável for ’empregados’ então execute o:
SELECT * FROM sto_employees;
Se o valor for produtos então execute:
SELECT * FROM sto_products;
Para qualquer outro valor:
SELECT * FROM sto_emp_salary_paid;
Ver como isto é traduzido para instruções NESTED IF em SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/*Declarando uma variável de string*/
DECLARE @table_name VARCHAR(60);
/* Atribuição de um valor*/
SET @table_name = ‘produtos’;
/*Executar a declaração IF*/
IF @table_name = ’empregados’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘produtos’
SELECT * FROM sto_products;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
GO
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/*Declarando uma variável de string*/
DECLARARAR @table_name VARCHAR(60);
/* Atribuição de um valor*/
SET @table_name = ‘encomendas’;
/*Executar a declaração IF*/
IF @table_name = ’empregados’
SELECT * FROM sto_employees;
ELSE
BEGIN
IF @table_name = ‘produtos’
SELECT * FROM sto_products;
ELSE
BEGIN
IF @table_name = ‘encomendas’
SELECT * FROM sto_orders;
ELSE
SELECT * FROM sto_emp_salary_paid;
END ;
END ;
GO
|
Como eu defino o valor da variável como ordens, a declaração IF deve retornar os registros da tabela de sto_orders.
No código, você pode ver a terceira instrução IF iniciada após a segunda palavra-chave BEGIN.
Nota: Se você quiser usar a execução condicional na instrução SELECT então use a instrução CASE em SQL.