Postagens

Mostrando postagens de dezembro, 2021

Dica de performance: Eliminando cursor com Window Functions + top 1 with ties

Imagem
 Olá  pessoal, tudo bem? Hoje gostaria de dar uma dica bem legal!! Muitos de vocês já devem saber que cursor na maioria das vezes é um grande vilão de performance no SQL-SERVER, isso porque o SQL não foi feito para processamento linha a linha e sim para um processamento em lote, vamos pensar SET-BASED! Hoje estarei mostrando para vocês um caso muito comum do dia dia. Vamos ao cenários: Precisamos pegar a última compra do cliente! Simples assim. Temos a tabela  cliente_tb, que guarda os dados do cliente e a tabela   venda_tb que guarda os dados da venda, basicamente um cliente pode fazer N  compras e nós precisamos pegar a ultima. Segue cursor que vejo na maioria dos casos: drop table if exists #aux create table #aux ( id_cliente int  ,nome           varchar(250) ,dt_venda datetime  ) DECLARE @id_cliente int -- Cursor para percorrer os registros DECLARE cursor1 CURSOR FOR select id_cliente from cliente_tb --Abrindo Cursor OPEN cursor1  -- Lendo a próxima linha FETCH NEXT FROM cursor1 IN