none
如何一次插入十个随机值 RRS feed

  • 问题

  • 我建了一张表,有一个字段是VC_FD_NO  是主键

    我插入10条测试数据

    USE [Monitoring]
    GO
    DECLARE @a INT
    SET @a=1
    INSERT [dbo].[CT_Dis_FuelingData]
    SELECT CAST((CAST(RAND(10)*9999 AS INT)+1)AS VARCHAR(10)),
    CAST(RAND(10)*10 AS INT) ,
    '93#',
    CAST(RAND(100)*100 AS DECIMAL(18,2)),
    7.5,
    CAST(RAND(100)*100 AS DECIMAL(18,2)),
    0,
    '2012-11-19 00:12:12',
    '201211191255',
    '2012-11-19',
    0,
    @a+1
    GO 10

    测试数据都是在SSMS里执行的

    CAST((CAST(RAND(10)*9999 AS INT)+1)AS VARCHAR(10))

    不知道为什么无论我怎麽执行这句话的随即值都是不变的,都是7137这个值,是不是要在SSMS里新建一个查询窗口才改变,换句话说是不是在同一个连接里随机值无论执行多少次都是

    不变的?


    给我写信: QQ我:点击这里给我发消息

    2012年11月19日 5:08

答案

  • 联机丛书说得很清楚:

    RAND 函数是伪随机数生成器,它将以类似于 C 运行时库 rand 函数的方式进行运算。如果没有提供种子值,系统将生成它自己的可变种子值。如果用某个种子值调用 RAND,则必须使用可变种子值来生成随机数。如果用同一种子值多次调用 RAND,它将返回同一生成值。在以下脚本中,对 RAND 的多次调用将返回同一值,这是因为它们都使用了同一种子值:

    <//img>复制代码
    SELECT RAND(159784);
    SELECT RAND(159784);
    SELECT RAND(159784);

    从 RAND 生成随机数的常用方法是,用相对可变的某个值作为种子值,例如将 GETDATE 的几个部分累加:

    <//img>复制代码

    SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 ) + (DATEPART(ss, GETDATE()) * 1000 ) + DATEPART(ms, GETDATE()) );

    你这个需求可以不用种子,或者每次用上次的值作为种子。


    想不想时已是想,不如不想都不想。

    2012年11月19日 5:28
    版主
  • 或许你可以参考艾小克的这篇文章,其中有提到多种做法来产生随机值。

    http://www.dotblogs.com.tw/chhuang/archive/2008/03/18/1883.aspx


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年11月19日 6:24

全部回复

  • 联机丛书说得很清楚:

    RAND 函数是伪随机数生成器,它将以类似于 C 运行时库 rand 函数的方式进行运算。如果没有提供种子值,系统将生成它自己的可变种子值。如果用某个种子值调用 RAND,则必须使用可变种子值来生成随机数。如果用同一种子值多次调用 RAND,它将返回同一生成值。在以下脚本中,对 RAND 的多次调用将返回同一值,这是因为它们都使用了同一种子值:

    <//img>复制代码
    SELECT RAND(159784);
    SELECT RAND(159784);
    SELECT RAND(159784);

    从 RAND 生成随机数的常用方法是,用相对可变的某个值作为种子值,例如将 GETDATE 的几个部分累加:

    <//img>复制代码

    SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 ) + (DATEPART(ss, GETDATE()) * 1000 ) + DATEPART(ms, GETDATE()) );

    你这个需求可以不用种子,或者每次用上次的值作为种子。


    想不想时已是想,不如不想都不想。

    2012年11月19日 5:28
    版主
  • 或许你可以参考艾小克的这篇文章,其中有提到多种做法来产生随机值。

    http://www.dotblogs.com.tw/chhuang/archive/2008/03/18/1883.aspx


    以上說明若有錯誤請指教,謝謝。
    歡迎參觀我的BLOG - 積沙成塔

    2012年11月19日 6:24
  • 因为每次执行种子都是相同的,所以生成的随机数都是一样

    给我写信: QQ我:点击这里给我发消息

    2012年11月19日 11:46
  • 谢谢TerryChuang大侠,我先看一下


    给我写信: QQ我:点击这里给我发消息

    2012年11月19日 11:47
  • 2008,若是只建一次测试数据的话:

    Select Rand(RN)
     from (Select Top 10 Row_Number() over (order by object_id) as RN From Sys.Columns) T


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2012年11月20日 3:17