Archive for Maio, 2014

WHERE 1=1

 

Saudações caro leitor,

 

Atenção: O objetivo desse post não é discutir a utilidade inutilidade dessa ferramenta gambiara para montar queries dinamicamente.

 

Estava eu lendo uns artigos sobre SQL Server e me deparei com um post onde foi colocado a prova a eficiência do “WHERE 1=1”.

 

O autor fez uma comparação do resultado do plano de execução entre “WHERE 1=1” versus “WHERE SQRT(SQUARE(1 + 1)) * 3 = 6″ ou para quem não entendeu a brincadeira seria 6 = 6 usando funções do SQL Server.

 

E o resultado…. vocês podem ver abaixo. =\

 

 

E eu também cético não acreditei e fui rodar o SQL na minha própria máquina e o resultado é o mesmo… Se você não acredita como eu, rode e veja com seus próprios olhos. Rs

 

CREATE TABLE T (ID INT NOT NULL, TXT CHAR(32) NOT NULL)
 
;WITH CTE (ID) AS (
SELECT 1
UNION ALL
SELECT ID + 1 FROM CTE WHERE ID < 100000
)
 
INSERT INTO T
SELECT ID, REPLICATE('0', 32) FROM CTE
OPTION (MAXRECURSION 0)
 
UPDATE T SET ID = 1
UPDATE T SET ID = 1 WHERE 1 = 1
UPDATE T SET ID = 1 WHERE SQRT(SQUARE(1 + 1)) * 3 = 6

 

Loucura hein?! =\

 

Abraço e até a próxima.

 

Referências:
https://sqlfromhell.wordpress.com/2013/10/21/marcio-gomes-vs-sql-fight-2/

Tags: , ,

Como desabilitar o Auto Commit em SQL Server Management Studio

Saudações caro leitor,

 

Hoje vou falar de uma informação que pode ser trivial para alguns, irrelevantes para outro mas que em determinadas situações de pressão e temperatura pode ser um desespero para alguns.

 

Talvez vou saiba ou não, mas todos os scripts que executamos no gerenciador SQL Server Management Studio executam dentro de uma transação que tem um AUTO COMMIT, é isso mesmo ele “COMMITA” pra você automaticamente.

 

No dia à dia isso é quase irrelevante mas quando você precisa executar testes em que você deseja que a transação fique pendente, ou mesmo não quer correr o risco de cometer aquele deslize merda mexendo com um banco de dados que todo seu time usa.

 

Você pode ou deveria desabilitar o AUTO COMMIT, como fazer isso, simples…

 

Tools > Options > Query Execution > SQL Server > ANSI > MARCAR a opção SET IMPLICIT TRANSACTIONS

 

AutoCommit

 

Ai você se pergunta, mas e se eu esquecer de dar COMMIT ou ROLLBACK…

 

Quando você fechar a query vai aparecer a seguinte mensagem e basta você responder SIM (COMMIT) ou NÃO (ROLLBACK) e seja feliz.

 

AutoCommitClose

 

Abraço e até a próxima.

 

Referências:

Tags: , , , ,