转 zjcxc
最近在论坛看到有人问,如何快速生成100万不重复的8位编号,对于这个问题,有几点是需要注意的:
1. 如何生成8位随机数,生成的数越随机,重复的可能性当然越小
2. 控制不重复
3. 考虑性能
针对这个问题,我写了如下的示例来解决,希望能为有这类需求的人提供指导
生成100万条8位不重复数据的示例
USE tempdb
GO
-- 创建测试表
CREATE TABLE tb(id char(8))
-- 创建用于自动过滤重复值的唯一索引
CREATE UNIQUE INDEX IX_tb ON tb(id)
WITH IGNORE_DUP_KEY
GO
-- 测试数据插入的处理时间, 记录开始处理的时间点
DECLARE @dt datetime
SET @dt = GETDATE()
-- 插入随机数据
SET NOCOUNT ON
DECLARE @row int
SET @row = 1000000 -- 设置总记录数
WHILE @row >0
BEGIN
-- 显示提示信息, 表示还需要插入多行数据
RAISERROR('need %d rows', 10, 1, @row) WITH NOWAIT
-- 插入随机的位编码数据
SET ROWCOUNT @row
INSERT tb SELECT
id = RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)
FROM syscolumns c1, syscolumns c2
SET @row = @row - @@ROWCOUNT
END
-- 显示插入数据使用的时间
SELECT BeginDate = @dt, EndDate = GETDATE(),
Second = DATEDIFF(Second, @dt, GETDATE()),
GO
-- 显示最终的结果记录是否正确
SELECT COUNT(*) FROM tb
GO
-- 删除测试
DROP TABLE tb
解决中用到的技巧:
1. 控制产生的数据不重复,直接使用唯一索引中的 IGNORE_DUP_KEY 选项,使插入数据中的重复值自动过滤,避免手工处理重复
2. 使用 CHECKSUM 配合 NEWID() 函数,使生成的数据尽量随机,一般生成随机数会考虑使用 RAND() 函数,但这个函数是产生伪随机值,用下面的语句测试一下,会发现产生的数据全部是一样的,这不适用于想批量生成多个随机数,而NEWID() 函数生成的是GUID,基本上不会有重复的,再通过CHECKSUM将其转化成数字,这样产生重复的可能性会比较小
<!--End_rbody_58944299//-->
分享到:
相关推荐
生成一个永不重复的随机编码 随即数+日期+时+分+秒
随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不...
在JavaScript编程语言中,生成1到100之间不重复的随机数字是一项常见的需求,尤其在游戏、模拟或数据测试等场景中。本篇将详细解释如何实现这一功能。 首先,我们要理解JavaScript中的随机数生成。`Math.random()`...
可随机抽取题目的不重复PPT课件.pptx 这是一份PPT课件,主要用于随机抽取题目的教学活动。通过这份课件,教师可以快速生成随机题目,从而提高教学效率和互动性。 知识点1:PPT课件的应用 PPT课件是当前最流行的...
这是使用Python3.6编写的一个不重复随机点名的程序,有图形界面,可以用在课堂上和联谊活动里随机点名,而且可以做到不重复!非常适合老师们上课抽查学生,抽完所有名单后就会提示点名结束,简单易用。随资源奉上源...
在这个问题中,我们关注的是如何生成四位字符且无重复的验证码,以及如何进一步确保相邻字符不重复的实现方法。 1. 生成四位字符、整数组成的验证码(无重复码验证) 首先,我们需要一个包含所有可能字符的数组,...
可以随意定义范围,点击开始即开始随机滚动,当点击停止时,随机显示一个数字,并在下一次抽取过程中不重复出现
可以生成指定数量的不重复随机字符串,支持纯数字、字母和数字组合、字母数字加特殊字符
### Unity随机数不重复出现知识点详解 在Unity游戏开发中,随机数的生成是一个非常常见的需求,尤其是在设计一些需要概率事件或随机元素的游戏时。然而,有时候我们需要确保生成的随机数在一定范围内不会重复出现,...
随机线性网络编码原理,讲述随机线性网络编码的应用及模型建立
在这个特定的情况下,我们讨论的是一个名为"随机选不重复号程序"的项目。这个程序的主要功能是生成随机号码或者名字,同时确保每次选取的号码或名字都是独一无二的,避免重复。这种功能在抽奖、分组、竞赛编号分配等...
这个名为"随机抽号不重复"的项目提供了一种解决方案,允许用户自定义号段,并确保抽号过程中不出现重复,同时还能将结果导出。这个程序是基于C#语言编写的,使用者可以直接运行,且附带了个人手工编写的源代码,方便...
随机生成不重复字段-自定义各个字段长度,批量随机生成多个不重复多段字符串(每个段可自定义长度) 批量随机生成多个不重复多段字符串(每个段可自定义长度) 哪个字段有输入长度,即为生成多少段字符 1、生成10组...
此技术常用于各种场景,比如彩票系统、抽奖程序或需要无重复随机选择的应用。 ### 一、基本原理 生成不重复的随机数主要涉及两个关键步骤: 1. **创建一个有序序列**:首先准备一个包含所有可能数字的数组。 2. **...
标题中的“omf.rar_omf_伪随机序列_随机序列_随机编码”表明这是一个关于伪随机序列和随机编码的程序资源,其中“omf”可能是某种特定的文件格式或者编程语言的缩写。在IT领域,伪随机序列通常用于模拟真正的随机数...
4. **MyEclipse的插件支持**:MyEclipse虽然不直接提供随机编码生成的功能,但它支持Eclipse的插件系统。有一些第三方插件如Random String Generator可以帮助我们在IDE内快速生成随机字符串,提高开发效率。 5. **...
"Java开发技术调用Random函数,随机生成32位不重复的字符" 在Java开发技术中,生成随机数是非常常见的需求。例如,在注册用户账户时,需要生成一个随机的密码。在游戏开发中,需要生成随机数来决定游戏的结果。在...
儿童编程开发软件scratch制作简单程序《随机取不重复的数》
随机编码的matlab程序