Arquivo

Archive for the ‘Mentes Brilhantes’ Category

Série Mentes Brilhantes – Parte 7

12 de maio de 2010 3 comentários

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

11 de maio de 2010 3 comentários

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

11 de maio de 2010 1 comentário

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

10 de maio de 2010 3 comentários

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

9 de maio de 2010 5 comentários

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

7 de maio de 2010 1 comentário

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

6 de maio de 2010 4 comentários

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