Arquivo
Série Mentes Brilhantes – Parte 17
O que fazer quando você quer dar uma impressão inicial de que MUITAS linhas serão retornadas, e de repente…
Haha pegadinha do malandro! Isso não é um produto cartesiano…
SELECT Orders.OrderID,
Orders.CustomerID,
Orders.OrderDate,
Customers.CompanyName,
Employees.Title
FROM Orders
CROSS JOIN Customers
LEFT OUTER JOIN Employees
ON Orders.EmployeeID = Employees.EmployeeID
INNER JOIN Shippers
ON Shippers.ShipperID = Orders.ShipVia
AND Orders.CustomerID = Customers.CustomerID
Obs.: Fiz uma pequena alteração para deixar o código ainda mais tenso…rs…
O original é um código que meu irmão Marcos Paulo me mandou, ele pegou essa belezinha sendo gerado pelo LINQ.
SELECT Orders.OrderID,
Orders.CustomerID,
Orders.OrderDate,
Customers.CompanyName
FROM Orders
CROSS JOIN Customers
WHERE Orders.CustomerID = Customers.CustomerID
Quer contribuir para essa série e fazer a felicidade de muitos? Me manda sua belezura para fabiano at amorim arroba (que não é do boi) dominio do bol ponto com ponto br
Abs.
Série Mentes Brilhantes – Parte 16
Pois é galera, para nossa felicidade a famosa série mentes brilhantes vai voltar…
A série mente brilantes é baseada em códigos que um amigo de um primo do meu cunhado viu por ai e me contou.
Pra quem ainda não viu segue o link com os outros 15 itens da série: https://blogfabiano.com/category/mentes-brilhantes/
Espero que se divirtam!
A de hoje é:
O que fazer quando você quer que sua rotina só rode depois da meia noite prevendo mudança de fuso-horário?
Fácil faça uma validação com IF…
DECLARE @Dt DateTime = GetDate() IF DATEPART(hour, @Dt) >= 24 BEGIN PRINT 'Entrou no IF' END
Série Mentes Brilhantes – Parte 15
O que fazer quando você não confia na clausula IF?
Simples, replique o código no ELSE IF.
Isso me lembra de uma frase que um amigo sempre fala: –“Se não vai no IF vai no ELSE.” (Brilhante)
DECLARE @Error Int,
@Message VarChar(200)
SET @Error = 1
IF @Error <> 0
BEGIN
SET @Message = dbo.ReturnError(‘InsertingError1’,@Error)
SELECT @Message AS Error
END
ELSE IF @Error <> 0
BEGIN
SELECT dbo.ReturnError(‘InsertingError1’,@Error) AS Error
END
Série Mentes Brilhantes – Parte 14
O que fazer quando você odeia a clausula WHERE ?
Simples, basta usar o filtro no INNER JOIN usando a clausula EXISTS
SELECT Tab1.Col1,
Tab1.Col2,
Tab2.Nome
FROM Tab1
INNERJOIN Tab2
ON Tab1.ID = Tab2.ID
ANDEXISTS(SELECT 1
WHERE Tab1.Col1 = 64
AND Tab1.Col2 > 10)
Série Mentes Brilhantes – Parte 13
O que fazer quando você gosta muito de usar a clausula IN?
Use-a, independente da quantidade de itens
SELECT*FROM Clientes
WHERE ID_Cliente IN(1,
2,
3,
4,
5,
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,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150)
Série Mentes Brilhantes – Parte 12
O que fazer quando você quer dar um ar mais profissional para seus Inserts?
Use um cursor para inserir os dados linha a linha
DECLARE tmp_Cursor CURSORSTATICREAD_ONLYLOCAL
FORSELECT Col1,
Col2,
Col3,
Col4,
Col5,
Col6,
Col7,
Col8
FROM dbo.fn_RetornaDados(@Col9,
@Col10,
@Col11,
@Col12)
OPEN tmp_Cursor;
FETCHNEXTFROM tmp_Cursor
INTO @Col1,
@Col2,
@Col3,
@Col4,
@Col5,
@Col6,
@Col7,
@Col8;
WHILE@@FETCH_STATUS= 0
BEGIN
INSERTINTO Tabela(Col1,
Col2,
Col3,
Col4,
Col5,
Col6,
Col7,
Col8)
VALUES (@Col1,
@Col2,
@Col3,
@Col4,
@Col5,
@Col6,
@Col7,
@Col8)
FETCHNEXTFROM tmp_Cursor
INTO @Col1,
@Col2,
@Col3,
@Col4,
@Col5,
@Col6,
@Col7,
@Col8;
END
CLOSE tmp_Cursor;
DEALLOCATE tmp_Cursor;
Série Mentes Brilhantes – Parte 11
O que fazer quando você gosta muito de fazer selects?
Faça um select para ler cada coluna, desta forma você consegue deixar o código mais completo.
SELECT @ID_E = ID_E
FROM Tab1
INNER JOIN Tab2
ON Tab1.ID_Grupo = Tab2.ID_Grupo
WHERE Tab2.ID_Ass = 1;
SELECT @DT = DT,
@HR = HR,
@MN = MN,
@ID_G = ID
FROM Tab2
WHERE ID_Ass = 1;
SELECT @ID_A = ID_A
FROM Tab1
WHERE ID_G = 1;
Série Mentes Brilhantes – Parte 10
O que fazer quando você deseja apagar registro somente se ele existir na tabela?
Verifique se ele existe antes de apagar
IFEXISTS(SELECT 1 FROM Clientes WHERE ID_Cliente = @ID)
BEGIN
DELETEFROM Clientes WHERE ID_Cliente = @ID
END
Série Mentes Brilhantes – Parte 9
O que fazer quando você odeia like?
Não use o like, crie sus próprios meios para filtrar os dados
SELECT*FROM Pedido
WHERESubString(Vendedor,1,2)=‘Fa’
Série Mentes Brilhantes – Parte 8
O que fazer quando você odeia fazer joins?
Crie SubQuerys para retornar os dados das colunas.
SELECT ID_Pedido,
Valor,
(SELECT Nome FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS NomeCliente,
(SELECT Endereco FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS EnderecoCliente,
(SELECT Bairro FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS BairroCliente,
(SELECT Cidade FROM Clientes WHERE Clientes.ID_Cliente = Pedidos.ID_Cliente)AS CidadeCliente
FROM Pedidos
WHERE ID_Cliente = 10