100万个不重复的8位的随机数
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
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 --select ... FROM syscolumns c1, syscolumns c2的行数会超过100W,这里只取100W
INSERT Testtb(code) SELECT ---一次性的插入100W条记录,如果有重复的记录,那需要第二次执行插入,以此类推,一直到插入100W条为止。
id = 'ABCD' + RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)--100000000用来确保生成的随机数字有8位长度,
FROM syscolumns c1, syscolumns c2 --这里使用syscolumns只是为了获得大于100W的记录而已。至于随机的来源是个这个表是没有关系的。
SET @row = @row - @@ROWCOUNT --根据影响的行数,设置循环的时候需要插入的记录数量,这个记录数量等于本次操作中重复的记录的行数。
END
SELECT BeginDate = @dt, EndDate = GETDATE(), Second = DATEDIFF(Second, @dt, GETDATE())
GO
SELECT COUNT(*) FROM Testtb
GO
/*我的问题是
(1)为什么使用CHECKSUM()来生成随机数字?
(2)NEWID是生成一个唯一标志,既然它是唯一性的,怎么会又有重复的呢?
(3)http://msdn2.microsoft.com/zh-cn/library/ms189788.aspx
返回按照表的某一行或一组表达式计算出来的校验和值。CHECKSUM 用于生成哈希索引。
哈希表索引是数字型的吗?
*/
RAISERROR('need %d rows', 10, 1, @row) WITH NOWAIT --有重复行发生的时候把信息输出到客户端
-- 这个是直接给提示信息, 有重复时的提示信息是sql自动抛出的
INSERT Testtb(code) SELECT ---一次性的插入100W条记录,如果有重复的记录,那需要第二次执行插入,以此类推,一直到插入100W条为止。
-- 有重复的数据的时候, 重复的数据会自动过滤掉
CHECKSUM
返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。
语法
CHECKSUM ( * | expression [ ,...n ] )
参数
*
指定在表的所有列上进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。不可比数据类型是 text、ntext、image、cursor 以及基本类型为前 4 个数据类型之一的 sql_variant。
expression
是除非可比数据类型之外的任何类型的表达式。
返回类型
int
000
转载于:https://www.cnblogs.com/hantianwei/archive/2010/02/26/1674488.html
100万个不重复的8位的随机数相关推荐
- 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码
使用10个数字与52个字母生成1477万个不重复的4位串码(比如应用系统流水号应用场景),那么如何实现动态生成这类串码,并保证其不重复呢? 一.主要思想(进位思想): 将0-9-A-z,62个字符做为 ...
- 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V4衍生版本
一.主要思想(进位制思想与移位思想): { "0", "1", "2", "3", "4", &q ...
- 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V3完结版本
一.主要思想(进位制思想): 将0-9-A-z,62个字符做为一个进制系统,存入一个数组,既62位数字进制,4位串码前位不够补0. 累加的操作只需要将末位往后移动一位循环移动,逢"Z&quo ...
- 在1 MB RAM中排序100万个8位数字
本文翻译自:Sorting 1 million 8-digit numbers in 1 MB of RAM I have a computer with 1 MB of RAM and no oth ...
- 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
/******************************************************************************* 文 件 名 : test100.cpp ...
- 2020黑客报告:7位道德黑客赏金收入超100万
什么是黑客?用<黑客与画家>的作者 Paul Graham 的话说--和画家一样,黑客只是怀有一门特殊手艺.有创造天赋的普通人. 在大众眼里,"黑客"(hacker)就 ...
- 一位豪气的老板,送东西送到让客户都不好意思了,当天收款100万!
做生意要想赚大钱,你必须首先把优惠给到客户,用真心,才能换真心. 就目前的社会环境来说,生意相比十年前,难做了许多,相比五年前,也难做许多. 一位豪气的老板,送东西送到让客户都不好意思了,当天收款10 ...
- 有一个100万的数组,里边有两个是重复的,如何设计算法找到
输出:两个重复的元素的索引 首先,直接两重循环查找不是不行,估计是最蠢的做法了. 其次,先用快速排序拍一遍,然后遍历,时间复杂度最好的情况是最坏的情况是nlogn+n 有人说是用hash,有人说用位图 ...
- php生成10万个字符串,有什么好的方法可以生成十万条不重复的13位纯数字字符串...
有什么好的方法可以生成十万条不重复的13位纯数字字符串 回复内容: 有什么好的方法可以生成十万条不重复的13位纯数字字符串 一个个来.从13个0开始,一次加1... 可用时间戳来生成,或者后面再加随机 ...
- AI 人才缺失催生跨境猎头:人才年薪高达 300 万,猎头直赚 100 万
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! AI 市场蓬勃发展,催生了一个新的职业,他们就是"跨境猎头". 近两年内 ...
最新文章
- 十大成长型机器人技术大盘点
- [BZOJ2947]促销(Splay)
- linux 中php以及nginx的重启命令
- 华为emui10是鸿蒙,昨日,华为EMUI10,鸿蒙系统正式发布!
- javascript基本数据类型问题汇总
- php是isapi运行模式,php isapi运行模式
- linux下dup函数,Linux dup dup2函数理解
- SpringSecurity 权限控制之异常处理流程图
- P3369-[模板]普通平衡树【无旋Treap】
- matlab 功率谱密度 汉宁窗_如何理解随机振动的功率谱密度?
- [BUGKU][CTF][PWN][2020] PWN writeup
- 谷歌浏览器如何如何禁用弹出窗口阻止程序
- yota3墨水屏设置_汉阳环卫工节前给道路隔音屏“洗澡”
- 如何把域名解析到网站空间IP上?
- 详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
- 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
- 网络安全:9次实验带你学会网安
- Django--表单
- (丝滑版)Python使用Opencv画一个哆啦A梦(动态),并制作成可执行文件.exe
- 如何在 macOS 上使用 Verilog 模拟电气模型