--测试数据
create table test
(
code bigint
)create procedure p_createrand 
@seed bigint,@random_count int
as
declare @i int
declare @random_number bigint
set @i=0
begin
while(@i<@random_count)
begin
set @random_number=cast(rand()*@seed as bigint)
if not exists(select 1 from test where code=@random_number)
begin
                   insert into test values(@random_number)
   set @i=@i+1
end
end
endexec p_createrand 100,60select * from test
33
93
6
42
1
47
31
85
64
82
95
79
92
99
9
94
41
3
50
2
10
83
65
52
28
66
30
4
43
39
15
67
78
20
11
84
68
70
81
71
56
21
19
35
13
0
32
74
51
60
97
72
40
8
57
45
23
77
80
38(所影响的行数为 60 行)

解决方案 »

  1.   

    --我觉得参数1应该是输入随机数的位数,比如输入2,就应该显示10-99之间的随机数.
        
        declare @random_number bigint
        set @random_number=(power(10,@seed)-1-power(10,@seed-1))*rand()+power(10,@seed-1)
      

  2.   

    --老陈说的好!改一下create procedure p_createrand 
    @seed bigint,@random_count int
    as
    declare @i int
    declare @random_number bigint
    set @i=0
    begin
    while(@i<@random_count)
    begin
    set @random_number=(power(10,@seed)-1-power(10,@seed-1))*rand()+power(10,@seed-1) if not exists(select 1 from #test where code=@random_number)
    begin
                       insert into test values(@random_number)
       set @i=@i+1
    end
    end
    end
      

  3.   

    set @random_number=(power(10,@seed)-1-power(10,@seed-1))*rand()+power(10,@seed-1)
    老陈的算法是: 2位 代表 10-99
    那么 随机数=10+rand()*(99-10)3位依次类推
      

  4.   

    @seed bigint,@random_count int,这样就限制了随机数的长度,如果我想生成10位长,20位长,甚至更长的怎么办?
      

  5.   

    @seed bigint,@random_count int
    @seed 已经不需要bigint了,@seed是长度的意思,而不是具体的数值.
    @random_count 为int也足够了,它是你要产生几个数字的意思.真正放随机数字的变量是@random_number      bigint
    bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。也能满足20位长度了.
      

  6.   

    如果我想生成10位长,20位长,甚至更长的怎么办?
    更长? 那得看你的计算机能支持到多少位长度的整数了,SQL SERVER 到
    -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 
      

  7.   

    如果要生成20位长的的话,power(10,@seed)应该改成power(10.0,@seed),否则只能达到10位的长度