Você conhece a nova função GENERATE_SERIES do SQL server 2022? Nunca foi tão fácil realizar contagens no SQL :)

  Olá pessoal, espero que estejam todos muito bem :)

    Hoje eu vim trazer para vocês uma nova função do SQL server que nos permite fazer contagens de forma muito simples, eu acho incrível como essa linguagem vem sofrendo melhorias tão boas ao longo dos anos.

    O cenário de utilização é muito simples, vamos supor que você precise realizar uma contagem no SQL, como por exemplo, de 1 até 10, a maioria as pessoas pensam em utilizar um while, mas pode ser feito com "CTE", "CURSOR" ou até mesmo "GO TO",  de todas essas que falei CTE com certeza é a minha favorita, para exemplo irei fazer uma contagem de 1 até 10 utilizando WHILE  e CTE,

 pois não recomendo realizar contagens utilizando de "GO TO"  ou "CURSOR".

    Utilizando WHILE:

Utilizando CTE:


Todas essas linhas de código vão se resumir a apenas uma única linha com a função GENERATE_SERIES, conforme oi exemplo abaixo:


Generate_series



 Mágico né? Vamos conhecer os parâmetros que essa função aceita.


START = Parâmetro que aceita  data types do tipo( tinyint, smallint, int, bigint, decimal ou numérico), ele indica qual posição a contagem irá começar.


STOP= Parâmetro que aceita  data types do tipo( tinyint, smallint, int, bigint, decimal ou numérico), ele indica qual posição a contagem irá parar. Um detalhe importante sobre esse parâmetro é que ele precisa ser o mesmo data type do parâmetro START.



STEP = O parâmetro STEP indica o número de valores a serem incrementados ou decrementados entre as etapas da série. O parâmetro STEP é uma expressão do tipo tinyint, smallint, int, bigint, decimal ou numérico. STEP pode ser negativo ou positivo, mas não pode ser zero (0).

Esse argumento é opcional. O valor padrão de STEP será 1 quando START for menor que STOP. Caso contrário, o valor padrão será -1 quando START for maior que STOP.

Se START for menor que STOP e um valor negativo for especificado para STEP, ou se START for maior que STOP e um valor positivo for especificado para STEP, um conjunto de resultados vazio será retornado


Vamos a alguns exemplos.


Como informando na descrição do valor STOP, caso o datatype de START e STOP for diferente dará um erro:




Vamos realizar uma contagem descrente:




Vamos contar de 1 até 50, mas pulando de dois em dois:



Podemos também realizar contagens com valores numeric(x,y):




Agora vamos a um pequeno teste de performance:




Nos testes que fiz a nova função se mostrou melhor em tempo de execução e consumo de CPU!

Bem pessoal, por hoje é isso, espero que tenham gostado do conteúdo.

Link de referência:

https://docs.microsoft.com/pt-br/sql/t-sql/functions/generate-series-transact-sql?view=sql-server-ver16


Comentários

Postagens mais visitadas deste blog

Tuning no Postgres utlizando View Materializada

Como realizei um tuning que caiu o tempo de execução de 8h para 7minutos!

Window Functions: Row_number()