Based on my understanding of your requirements:
declare @t table (
RegionName varchar(10) not null primary key clustered,
[Min] int not null,
[Max] int not null,
[NumberToGenerate] int not null
)
insert into @t
select 'Region 1', 0, 5000, 15union all
select 'Region 2', 1700, 2300, 25union all
select 'Region 3', 13, 55, 14
declare @maxNumberToGenerate int
select @maxNumberToGenerate = max(NumberToGenerate) from @t
declare @num table (number int not null primary key clustered)
insert into @num
select number
from
-- Number table function F_TABLE_NUMBER_RANGE available here
-- http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=47685
dbo.F_TABLE_NUMBER_RANGE(1,@maxNumberToGenerate)
order by
number
select
b.RegionName,
a.number,
-- Generate random number in range of Min to Max
RandNo =
(convert(bigint,convert(varbinary(7),newid()))%([max]-[Min]+1))+[Min]
from
@num a
join
@t b
on a.number <= NumberToGenerate
order by
b.RegionName,
a.number
Results:
RegionName number RandNo
---------- ----------- --------------------
Region 1 1 4725
Region 1 2 2763
Region 1 3 1661
Region 1 4 794
Region 1 5 3244
Region 1 6 1766
Region 1 7 3613
Region 1 8 4361
Region 1 9 585
Region 1 10 447
Region 1 11 4242
Region 1 12 336
Region 1 13 230
Region 1 14 1029
Region 1 15 1149
Region 2 1 1710
Region 2 2 1744
Region 2 3 1762
Region 2 4 1953
Region 2 5 1996
Region 2 6 1909
Region 2 7 1993
Region 2 8 1864
Region 2 9 2218
Region 2 10 2044
Region 2 11 1890
Region 2 12 2004
Region 2 13 1723
Region 2 14 1944
Region 2 15 2132
Region 2 16 1769
Region 2 17 1848
Region 2 18 1878
Region 2 19 2193
Region 2 20 1858
Region 2 21 2293
Region 2 22 2124
Region 2 23 1787
Region 2 24 1714
Region 2 25 1844
Region 3 1 41
Region 3 2 48
Region 3 3 26
Region 3 4 18
Region 3 5 18
Region 3 6 52
Region 3 7 41
Region 3 8 33
Region 3 9 25
Region 3 10 22
Region 3 11 19
Region 3 12 33
Region 3 13 19
Region 3 14 52
(54 row(s) affected)