Arquivo
Série Mentes Brilhantes – Parte 7
O que fazer quando você quer atribuir um valor para uma variável mas somente se o valor existir na tabela?
Simples, verifique se o valor existe na tabela antes de atribui-lo.
IF EXISTS(SELECT 1
FROM Tab1
WHERE Col1 = @Col1
AND Col2 = ‘FR’)
BEGIN
SELECT @Col3 = Col3
FROM Tab1
WHERE Col1 = @Col1
AND Col2 = ‘FR’;
END
IF EXISTS(SELECT 1
FROM Tab1
WHERE Col1 = @Col1
AND Col2 = ‘TA’)
BEGIN
SELECT @Col3 = Col3
FROM Tab1
WHERE Col1 = @Col1
AND Col2 = ‘TA’;
END
Ps: Sabe aonde eu já vi isso? No script da procedure sp_who2. Que beleza!
Série Mentes Brilhantes – Parte 6
O que fazer quando você precisa que o SQL retorne os dados, mas você não quer esperar muito tempo para que ele leia as informações?
Use um hint para retornar as primeiras 5 milhões de linhas FAST, ou seja, rápido.
SELECT * FROM Pedidos
OPTION(FAST 5000000)
Série Mentes Brilhantes – Parte 5
O que fazer quando você gosta muito de fazer Updates?
Crie um Update para cada campo que será atualizado
UPDATE Clientes SET Nome = @NovoNome
WHERE ID_Cliente = @ID
UPDATE Clientes SET Sobrenome = @NovoSobrenome
WHERE ID_Cliente = @ID
UPDATE Clientes SET Endereco = @NovoEndereco
WHERE ID_Cliente = @ID
UPDATE Clientes SET Bairro = @NovoBairro
WHERE ID_Cliente = @ID
UPDATE Clientes SET CEP = @NovoCEP
WHERE ID_Cliente = @ID
Série Mentes Brilhantes – Parte 4
O que fazer quando você gosta muito de uma tabela?
Sempre faça joins com ela, mesmo quando você não precisa dos dados.
SELECT Pedido.Codigo_Pedido
FROM Pedido
INNER JOIN Clientes
ON Pedido.ID_Cliente = Clientes.ID_Cliente
Série Mentes Brilhantes – Parte 3
O que fazer quando você não gosta do SQL Server e dos desenvolvedores que irão dar manutenção no seu código?
Crie uma consulta simples pra eles
DECLARE @Col1 Integer,
@Col2 Integer,
@Col3 Integer;
SET @Col1 = <Input1>;
SET @Col2 = <Input2>;
SET @Col3 = <Input3>;
IF (@Col3 = 0)
BEGIN
SELECT Tab1.Col1,
Tab1.Col2,
Tab1.Col3,
Tab1.Col7,
Tab1.Col8,
Tab1.Col6,
Tab1.Col9,
Tab1.Col10,
CASE WHEN ((Tab2.Col11 IS NOT NULL) AND
(Tab3.Col12 = ‘P’) AND
(Tab3.Col13 = ‘G’))
THEN CASE WHEN (Tab2.Col11 = ‘LL’)
THEN (SELECT CASE WHEN (Tab4.Col15 = ‘Q’)
THEN Tab4.Col16
ELSE Tab4.Col17
END
FROM Tab4(NOLOCK)
WHERE Tab4.Col1 = Tab1.Col1 AND
Tab4.Col2 = Tab1.Col2 AND
Tab4.Col3 = Tab1.Col3 AND
Tab4.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
ELSE CASE WHEN (Tab2.Col11 = ‘LF’)
THEN (SELECT CASE WHEN (Tab4_Fixos.Col15 = ‘Q’)
THEN Tab4_Fixos.Col16
ELSE Tab4_Fixos.Col17
END
FROM Tab4_Fixos(NOLOCK)
WHERE Tab4_Fixos.Col1 = Tab1.Col1 AND
Tab4_Fixos.Col2 = Tab1.Col2 AND
Tab4_Fixos.Col3 = Tab1.Col3 AND
Tab4_Fixos.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
ELSE CASE WHEN (Tab2.Col11 = ‘2F’)
THEN (SELECT CASE WHEN (Tab6.Col15 = ‘Q’)
THEN Tab6.Col16
ELSE Tab6.Col17
END
FROM Tab6(NOLOCK)
WHERE Tab6.Col1 = Tab1.Col1 AND
Tab6.Col2 = Tab1.Col2 AND
Tab6.Col3 = Tab1.Col3 AND
Tab6.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
ELSE (SELECT CASE WHEN (Tab4_Lim.Col15 = ‘Q’)
THEN Tab4_Lim.Col16
ELSE Tab4_Lim.Col17
END
FROM Tab4_Lim(NOLOCK)
WHERE Tab4_Lim.Col1 = Tab1.Col1 AND
Tab4_Lim.Col2 = Tab1.Col2 AND
Tab4_Lim.Col3 = Tab1.Col3 AND
Tab4_Lim.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
END
END
END
ELSE Tab1.Col18
END AS Col19,
Tab1.Col18,
Tab1.Col20,
Tab7.Col21,
Tab8.Col22,
Tab3.Col23,
Tab1.Col24,
CASE WHEN (Tab2.Col11 = ‘LL’)
THEN (SELECT Tab4.Col15
FROM Tab4(NOLOCK)
WHERE Tab4.Col1 = Tab1.Col1 AND
Tab4.Col2 = Tab1.Col2 AND
Tab4.Col3 = Tab1.Col3 AND
Tab4.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
WHEN (Tab2.Col11 = ‘LI’)
THEN (SELECT Tab4_Lim.Col15
FROM Tab4_Lim(NOLOCK)
WHERE Tab4_Lim.Col1 = Tab1.Col1 AND
Tab4_Lim.Col2 = Tab1.Col2 AND
Tab4_Lim.Col3 = Tab1.Col3 AND
Tab4_Lim.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6))
WHEN (Tab2.Col11 = ‘LF’)
THEN ‘F’
WHEN (Tab2.Col11 = ‘2F’)
THEN ‘2’
END AS Col15,
Tab1.Col25
FROM Tab1(NOLOCK)
INNER JOIN Tab7(NOLOCK)
ON Tab7.Col26 = Tab1.Col26 AND
Tab7.Tipo = Tab1.Tipo
INNER JOIN Tab8(NOLOCK)
ON Tab8.Col7 = Tab1.Col7
INNER JOIN Tab3(NOLOCK)
ON Tab1.Col1 = Tab3.Col1
RIGHT OUTER JOIN Tab2(NOLOCK)
ON Tab2.Col1 = Tab1.Col1 AND
Tab2.Col2 = Tab1.Col2 AND
Tab2.Col3 = Tab1.Col3 AND
Tab2.Col4 IN(SELECT Col4
FROM Tab5(NOLOCK)
WHERE Tab5.Col1 = Tab1.Col1 AND
Tab5.Col5 = Tab1.Col6)
WHERE Tab1.Col1 = @Col1 AND
Tab1.Col2 = @Col2 AND
Tab1.Col3 = @Col3 AND
Tab1.Col10 > 0 AND
Tab1.Col8 IS NOT NULL
Série Mentes Brilhantes – Parte 2
O que fazer quando você não gosta da clausula WHERE?
Use a clausula HAVING
SELECT Cliente, Vendedor
FROM Pedido
GROUP BY Cliente, Vendedor, Data
HAVING Data BETWEEN ‘20090101’ AND ‘20090201’
Série Mentes Brilhantes – Parte 1
Vou começar a publicar uma série que chamei de “Mentes Brilhantes”… espero que gostem 🙂 ….
O que fazer quando você precisa que o resultado de uma consulta não retorne linhas duplicadas?
Use o DISTINCT
SELECT DISTINCT Cliente, Vendedor
FROM Pedido
O que fazer quando você precisa que o resultado de uma consulta não retorne nenhuma linha duplicada?
Use o GROUP BY
SELECT Cliente, Vendedor
FROM Pedido
GROUP BY Cliente, Vendedor
O que fazer quando você precisa que o resultado de uma consulta não retorne nenhuma linha duplicada meeeesmo?
Use DISTINCT + GROUP BY. J
SELECT DISTINCT Cliente, Vendedor
FROM Pedido
GROUP BY Cliente, Vendedor





