Генерация случайных значений на сервере SQL - PullRequest
0 голосов
/ 27 января 2020

Я пытался сгенерировать хранимую процедуру со случайным возвратом.

Попробовал так много разных способов, а затем нашел "Чистый способ" сделать то, что мне нужно ...

Но. . Я запускаю некоторые симуляции, и число результатов в 0 и 1 намного меньше, чем в других значениях. Что не справедливо с этими числами ...

Это мой код:

DECLARE @val FLOAT

SET @val = (SELECT ROUND(RAND(CHECKSUM(NEWID())), 1))

INSERT INTO randomtable (value)
    SELECT @val
GO 1000000

Это результаты:

Results of the simulations

Как вы можете видеть, в 0 и 1 есть только 8800 результатов, а в других - более 17000 результаты ..

Как надежно создать систему для генерации случайных значений?

1 Ответ

2 голосов
/ 27 января 2020

Вы можете пропустить random ():

select randomcol, count(*) as counter
from
(
select cast(ABS(CHECKSUM(NEWID())) % 11 /10.0 as decimal(2, 1)) as randomcol
from master.dbo.spt_values as a
cross join master.dbo.spt_values as b
) as a
group by randomcol
order by randomcol;
...