在网上看到一段随机数代码如下,请问月为什么要乘100000,秒为什么要乘1000呢??if exists (select * from sysobjects where name='proc_randCardID') 
drop procedure proc_randCardID 
go 
create procedure proc_randCardID 
@randCardID varchar(20) output 
as 
declare @r numeric(15,8),@tempstr varchar(10) 
select @r=rand((datepart(mm,getdate())*100000)+(datepart(ss,getdate())*1000)+datepart(ms,getdate())) 
set @tempstr=cast(@r as varchar) 
set @randCardID='1010 3576 '+substring(@tempstr,3,4)+' '+substring(@tempstr,5,4) 
go

解决方案 »

  1.   

    是给出种子值或起始值的整型表达式(tinyint、smallint 或 int)。
      

  2.   

    其实你只要把程序copy出来,运行下,就知道什么问题了,上面的程序可改为create procedure proc_randCardID 
    @randCardID varchar(20) output 
    as 
    declare @r numeric(15,8),@tempstr varchar(10) 
    select @r=rand((datepart(mm,getdate())*100000)+(datepart(ss,getdate())*1000)+datepart(ms,getdate())) 
    set @tempstr=cast(@r as varchar) 
    set @randCardID='时间: '+substring(@tempstr,3,4)+' '+substring(@tempstr,5,4) 
    select @randCardID
    go
    创建后运行:
    exec proc_randCardID '' 
    然后你不停执行exec proc_randCardID ''  就会知道,其实这里只不过是一个计算时间的程序,只不过精确的位数比较多而已。
    而上面的倍数,如果你改成1 ,结果都是一样的! 我觉得是毫无意义!!!