Dica de performance: Eliminando cursor com Window Functions + top 1 with ties
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 --Abrind...