В SQL есть функция RAND() которая может генерировать псевдослучайные числа. Например такой запрос:
Select Rand()
Вернет:
Дальше можно немного модифицировать выборку. Скажем, нам нужно, что бы выбиралось целое число от 0 до 100, тогда запрос будет таким:
SELECT FLOOR(100*RAND());
Ну и если от 10 до 100, то таким:
SELECT FLOOR(100*RAND()+10);
В языке SQL поддерживаются функции, так почему бы не написать обертку на Rand, которая будет генерировать числа от и до нужных нам границ?
Я попробовал написать такой код:
CREATE FUNCTION [dbo].[getRandom](@min int, @max int) RETURNS INT AS BEGIN Return FLOOR(@max*RAND() + @min); END
Всё очевидно, но MSSQL генерирует ошибку:
Недопустимое использование оператора «rand», оказывающего побочное действие, в функции.
Google вернул один результат на этот сайт. Здесь предлогают решение: Создать представление, а потом от него сделать функцию.
Воспользуемся:
--Создаем представление CREATE VIEW dbo.vRand(V) AS SELECT RAND(); --И Создаем функцию CREATE FUNCTION [dbo].[getRandom](@min int, @max int) RETURNS INT AS BEGIN Return (SELECT FLOOR(@max*V + @min) FROM dbo.vRand) END
Использование:
select dbo.getRandom(1,2) select dbo.getRandom(4,20)
1 Response