SQL Server生成300个8位不重复随机数

Chloe
Chloe
发布时间:2026-10-14 | 3人浏览过
原创

在软件测试或数据分析场景中,常需要批量生成符合特定规则(如指定位数、不重复)的随机数值。本文将详细介绍如何在 SQL Server 环境中,通过一段完整的 T-SQL 代码高效生成 300 个 8 位不重复的纯数字随机数。

实现原理与准备

生成的核心逻辑依赖于 SQL Server 中的 RAND() 函数以及循环控制结构。为了实现“不重复”这一约束,我们需要引入一个临时表来存储已生成的数字。每次生成新号码时,都会先在临时表中查询该号码是否已存在:若不存在则插入并累加计数器;若已存在则放弃本次生成并重新尝试。

操作步骤

第1步:定义变量与开启无影响行数提示

首先,声明用于控制的整型变量。其中 @qnum 设定为 300 以确定目标生成数量。设置 SET NOCOUNT ON 可以禁止返回受影响的行数消息,从而减少网络负载并提升循环执行时的效率。

DECLARE @i INT = 0;
DECLARE @j INT;
DECLARE @qnum INT = 300; -- 生成随机数的数量
SET NOCOUNT ON

第2步:创建临时表存放结果

使用 CREATE TABLE #temp_Table(num INT) 创建一个名为 #temp_Table 的本地临时表,仅包含一个整型字段 num 用于保存生成的随机数。由于是临时表,其生命周期仅限于当前连接会话,便于后续清理。

CREATE TABLE #temp_Table(num INT)

第3步:执行循环生成与去重检查

这是核心步骤。使用 WHILE 循环直到计数器 @i 达到 @qnum。在循环内部:

  1. 利用 FLOOR(RAND()*(99999999-10000000)+10000000) 计算范围在 10,000,000 到 99,999,999 之间的整数,这保证了生成的数是 8 位纯数字。
  2. 通过 IF(NOT EXISTS(...)) 判断该数字是否已在临时表中。
  3. 若不在表中,则 INSERT 数据并将 @i 自增 1;若在,则跳过自增并继续下一次循环。
WHILE(@i < @qnum)
BEGIN
  SELECT @j = CAST(FLOOR(RAND() * (99999999 - 10000000) + 10000000) AS INT)
  IF(NOT EXISTS(SELECT num FROM #temp_Table WHERE num = @j))
  BEGIN
    INSERT #temp_Table (num) VALUES (@j)
    SET @i += 1;
  END
END

第4步:输出结果与清理资源

循环结束后,通过 SELECT DISTINCT num FROM #temp_Table 查看生成的全部随机数列表。最后,务必使用 DROP TABLE #temp_Table 删除临时表,释放服务器资源,保持数据库环境的整洁。

SELECT DISTINCT num FROM #temp_Table
DROP TABLE #temp_Table

总结

上述 SQL 脚本提供了一种简单直接的方式来在关系型数据库中生成大量去重的随机数据。虽然该方法对于小批量数据非常有效,但在极端高并发或极大数量级场景下,可能会因循环等待产生性能瓶颈,此时可考虑基于集合的操作进行优化。以上就是生成300个不同的随机数的SQL语句的详细内容,更多关于SQL生成随机数的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表