SQL2005 rand 函数不要种子 产生的随机数会有相同的吗?

解决方案 »

  1.   

    在单个查询中反复调用 RAND() 将产生相同的值,所以rand([seed]),你每次要修改种子seed的才能得出不一样的随机数。
      

  2.   


    一般使用 getdate() 的毫秒数据作为种子!如:rand(datepart(ms,getdate())*1000) 
      

  3.   

    在单个查询中反复调用 RAND() 将产生相同的值,所以rand([seed]),你每次要修改种子seed的才能得出不一样的随机数。======
    xixi 说的很对。
      

  4.   

    --以下示例将产生由 RAND 函数生成的四个不同的随机数。
    DECLARE @counter smallint;
    SET @counter = 1;
    WHILE @counter < 5
       BEGIN
          SELECT RAND() Random_Number
          SET @counter = @counter + 1
       END;
    GO
    Random_Number
    ----------------------
    0.28769876521071(1 行受影响)Random_Number
    ----------------------
    0.100505471175005(1 行受影响)Random_Number
    ----------------------
    0.292787286982702(1 行受影响)Random_Number
    ----------------------
    0.868829058415689(1 行受影响)
      

  5.   

    rand()在一个查询中只能生成一个随机数。一般习惯使用ABS(CHECKSUM(NEWID()))来生成,使用更方便,分布性也不错。SELECT TOP(10) name, rand(), ABS(CHECKSUM(NEWID()))
    FROM sys.objects
      

  6.   


    如果未指定 seed,则 Microsoft SQL Server 2005 Database Engine 随机分配种子值。对于指定的种子值,返回的结果始终相同。以下SQL执行3次的结果是不同的:SELECT rand(), rand(), rand()
    GO 3以下SQL执行3次的结果是相同的:SELECT rand(0), rand(), rand()
    GO 3
      

  7.   


    --tryselect right(rand( datepart(ss,getdate())),1)
      

  8.   


    用时间作为种子,通常是系统内部自动实现的。在不指定种子的情况下就是这样。
    用这种方式写,代码繁琐没有必要,而且因为getdate()的毫秒数只有333个,生成的随机数分布也不会太好。