I want to generate a random number X times with a range. I’ve tried to create a function:
x
CREATE FUNCTION Random_Number (@Times INT, @Upper BIGINT,@Lower BIGINT, @randomvalue numeric(18,10))
RETURNS INT
AS
BEGIN
DECLARE @Random BIGINT
DECLARE @Row INT
SET @Row = 1
WHILE @Row <= @Times
BEGIN
SELECT @Random = ROUND(((@Upper - @Lower -1) * @randomvalue + @Lower), 0)
SET @Row = @Row + 1
END
RETURN @Random
END
GO
select dbo.Random_Number(5,2002100001,2002100010,RAND())
The query only returns a single row:
#1 2002100003
I want the following result:
#1 2002100003
#2 2002100000
#3 2002100009
#4 2002100006
#5 2002100007
Is it possible?
Advertisement
Answer
You can use recursive approach :
with cte as (
select 2002100001 as st, 2002100010 as ed
union all
select c.st + 1, c.ed
from cte c
where c.st < c.ed
)
select top (5) st
from cte
order by newid();