代码

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

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位的随机数相关推荐

  1. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码

    使用10个数字与52个字母生成1477万个不重复的4位串码(比如应用系统流水号应用场景),那么如何实现动态生成这类串码,并保证其不重复呢? 一.主要思想(进位思想): 将0-9-A-z,62个字符做为 ...

  2. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V4衍生版本

     一.主要思想(进位制思想与移位思想): { "0", "1", "2", "3", "4", &q ...

  3. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V3完结版本

    一.主要思想(进位制思想): 将0-9-A-z,62个字符做为一个进制系统,存入一个数组,既62位数字进制,4位串码前位不够补0. 累加的操作只需要将末位往后移动一位循环移动,逢"Z&quo ...

  4. 在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 ...

  5. 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字

    /******************************************************************************* 文 件 名 : test100.cpp ...

  6. 2020黑客报告:7位道德黑客赏金收入超100万

    什么是黑客?用<黑客与画家>的作者 Paul Graham 的话说--和画家一样,黑客只是怀有一门特殊手艺.有创造天赋的普通人. 在大众眼里,"黑客"(hacker)就 ...

  7. 一位豪气的老板,送东西送到让客户都不好意思了,当天收款100万!

    做生意要想赚大钱,你必须首先把优惠给到客户,用真心,才能换真心. 就目前的社会环境来说,生意相比十年前,难做了许多,相比五年前,也难做许多. 一位豪气的老板,送东西送到让客户都不好意思了,当天收款10 ...

  8. 有一个100万的数组,里边有两个是重复的,如何设计算法找到

    输出:两个重复的元素的索引 首先,直接两重循环查找不是不行,估计是最蠢的做法了. 其次,先用快速排序拍一遍,然后遍历,时间复杂度最好的情况是最坏的情况是nlogn+n 有人说是用hash,有人说用位图 ...

  9. php生成10万个字符串,有什么好的方法可以生成十万条不重复的13位纯数字字符串...

    有什么好的方法可以生成十万条不重复的13位纯数字字符串 回复内容: 有什么好的方法可以生成十万条不重复的13位纯数字字符串 一个个来.从13个0开始,一次加1... 可用时间戳来生成,或者后面再加随机 ...

  10. AI 人才缺失催生跨境猎头:人才年薪高达 300 万,猎头直赚 100 万

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! AI 市场蓬勃发展,催生了一个新的职业,他们就是"跨境猎头". 近两年内 ...

最新文章

  1. 十大成长型机器人技术大盘点
  2. [BZOJ2947]促销(Splay)
  3. linux 中php以及nginx的重启命令
  4. 华为emui10是鸿蒙,昨日,华为EMUI10,鸿蒙系统正式发布!
  5. javascript基本数据类型问题汇总
  6. php是isapi运行模式,php isapi运行模式
  7. linux下dup函数,Linux dup dup2函数理解
  8. SpringSecurity 权限控制之异常处理流程图
  9. P3369-[模板]普通平衡树【无旋Treap】
  10. matlab 功率谱密度 汉宁窗_如何理解随机振动的功率谱密度?
  11. [BUGKU][CTF][PWN][2020] PWN writeup
  12. 谷歌浏览器如何如何禁用弹出窗口阻止程序
  13. yota3墨水屏设置_汉阳环卫工节前给道路隔音屏“洗澡”
  14. 如何把域名解析到网站空间IP上?
  15. 详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
  16. 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
  17. 网络安全:9次实验带你学会网安
  18. Django--表单
  19. (丝滑版)Python使用Opencv画一个哆啦A梦(动态),并制作成可执行文件.exe
  20. 如何在 macOS 上使用 Verilog 模拟电气模型

热门文章

  1. Azkaban流2.0
  2. 那些年,我爬过的北科(十)——搜索案例之ElasticSearch的使用
  3. 独家揭秘阿里云SQL Server AlwaysOn集群版重大突破
  4. JAVA发送HttpClient请求及接收请求结果过程
  5. Yii2中如何访问controller的二级目录下的控制器
  6. BenchmarkSQL 测试Oracle 12c TPC-C 性能
  7. 3.7-php连接MongoDB
  8. NSURLSession学习笔记(二)Session Task
  9. DevExpress 破解方式
  10. php成长之路--1.composer下载依赖