Un Blog su SQL Server e dintorni organizzato In Pillole

Come genero un numero causale in TSQL?

Durante la stesura di procedure e scripts capita di dover generare dei numeri casuali in TSQL; in genere la prima cosa a cui un developer penserebbe è la classica funzione RAND.

Effettivamente, come viene mostrato nell’articolo dell’MSDN di riferimento, la funzione fa esattamente al caso nostro in caso di esecuzione su diverse istruzioni; ad esempio lo snippet proposto dalla documentazione genera un risultato di questo tipo:

Risultato esecuzione script RAND documentazione msdn

Purtroppo la funzione RAND non si comporta bene nei casi in cui abbiamo la necessità di inserire numeri pseudo-casuali all’interno della medesima istruzione (ad esempio una insert da una select, come fatto in questo articolo per generare dati casuali al fine di calcolare media e percentili).

Attualmente l’unico modo che ho trovato è questo:

select top 100 abs(checksum(newid()))
from
	sys.objects s1, sys.objects s2

La funzione NEWID() garantisce la creazione di un valore casuale e sempre differente per ogni riga generata dalla select. Checksum calcola un hash di questo UNIQUEIDENTIFIER e l’ABS mi permette di portare il tutto alla forma assoluta dei numeri generati.

Voi quali metodi utilizzate per generare numeri random in SQL Server? Scrivete pure nei commenti se vi va.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *