NEWID() 从表中随机返回N条记录 SELECT TOP 10 * FROM ywle order by newid() order by 一般是根据某一字段排序,newid()的返回值 是uniqueidentifier ,order by newid()随机选取记录是如何进行的 RAND() 在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数。 但如果查询是这样的 select top 10 rand() from [table] 会发现10条结果是一样的。所以如果要产生10个随机数的话,可以这样 select top 10 rand(checksum(newid())) from [table]
附示例:转载自:http://topic.csdn.net/u/20080417/14/64ff6dd7-7052-4777-9c94-052263b8772a.html
如何快速生成100万不重复的8位编号 最近在论坛看到有人问,如何快速生成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 > 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
|
转载于:https://my.oschina.net/leafe/blog/32917