【问题标题】:SQL Server: how to insert random integers into table?SQL Server:如何将随机整数插入表中?
【发布时间】:2011-06-16 12:04:10
【问题描述】:

我有一个这样的测试表

CREATE TABLE #temp (
    rid INT IDENTITY (1, 1) NOT NULL,
    val INT NULL,
    CONSTRAINT pk_temp_rid PRIMARY KEY (rid)
);

SQL Server 中有哪些不同的方法可以将随机整数插入此表(例如 1000 行)。 while循环,交叉连接还是什么?

我试过了,但结果不正确

DECLARE @val AS INT = 1;

WHILE @val <= 1000
    BEGIN
        INSERT #temp (val)
        SELECT RAND(@val);
        SET @val = @val + 1;
    END

SELECT *
FROM   #temp;

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql sql-server-2008


    【解决方案1】:

    上面也是这样做的

    Insert Into @t
    Select Cast(rand(checksum(newid()))*1000000  as int)
    go 1000
    

    查看此链接:https://www.mssqltips.com/sqlservertip/1467/populate-a-sql-server-column-with-a-sequential-number-not-using-an-identity/

    【讨论】:

    • 我添加了这个链接,我填写了您从这里获得的解决方案,如果这不正确,请更新或删除
    【解决方案2】:

    来自SQL SERVER – Random Number Generator Script

    SELECT randomNumber, COUNT(1) countOfRandomNumber
    FROM (SELECT ABS(CAST(NEWID() AS binary(6)) % 1000) + 1 randomNumber
          FROM sysobjects) sample
    GROUP BY randomNumber;
    

    编辑:为了澄清,脚本是根据每行生成的随机数进行分组的。所以结果的总数不能保证。不过,您可以确定您永远不会得到比 SELECT COUNT(*) FROM sysobjects 更多的行数。

    【讨论】:

      【解决方案3】:

      您可以使用select CAST(RAND() * 1000000 AS INT) AS [RandomNumber] 生成或选择随机整数。 所以完整的查询将是这样的:

          DECLARE @t TABLE( randnum float )
      DECLARE @cnt INT; SET @cnt = 0
      WHILE @cnt <=10000
      BEGIN
      SET @cnt = @cnt + 1
      INSERT INTO @t
      SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
      + (DATEPART(ss, GETDATE()) * 1000 )
      + DATEPART(ms, GETDATE()) )
      END
      SELECT randnum, COUNT(*)
      FROM @t
      GROUP BY randnum
      

      问候..

      【讨论】:

      • 感谢您指出选择 CAST(RAND() * 1000000 AS INT) AS [RandomNumber]
      • 如果您重复执行此操作,您将获得许多 相同“随机”数字,因为 RAND 的参数是一个 seed,而 seed 将保持不变,直到当前毫秒发生变化。大多数系统每毫秒可以插入许多记录。
      【解决方案4】:

      我认为“一段时间”会起作用。你很亲密。

      DECLARE @val AS INT = 1;
      
      WHILE @val <= 1000
      BEGIN
          INSERT #temp (val)
          SELECT cast((RAND()*1000) as int);
          SET @val = @val + 1;
      END
      
      SELECT *
      FROM   #temp;
      

      【讨论】:

      • 谢谢,在@Tamer 的建议下我想通了
      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多