Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > [原创] 生成X个不重复的Y位长度的随机数
【标  题】:[原创] 生成X个不重复的Y位长度的随机数
【关键字】:
【来  源】:http://blog.csdn.net/cuixiping/archive/2007/04/13/1563708.aspx

[原创] 生成X个不重复的Y位长度的随机数

Your Ad Here
/*
[原创] 生成X个不重复的Y位长度的随机数
by cuixiping(无心) 2007-04-13
(经测试,速度还可以。改成存储过程也很容易,我就偷懒不写了。)

看到邹建大哥有一篇:
如何快速生成100万不重复的8位编号
http://blog.csdn.net/zjcxc/archive/2006/08/20/1099215.aspx
我是用另一种思路写的。
*/
declare @X int; /* 要获取的个数 */
declare @Y tinyint; /* 要获取的长度,越大越慢 */
declare @i int;
declare @j bigint;
declare @SQL1 varchar(1000);
declare @SQL2 varchar(1000);
declare @SQL3 nvarchar(2000);
set @X=100;
set @Y=6; /* 10的@Y次方必须大于@X。且@Y不要太大,否则会很慢,量“机”而为 */
set @i=2;
set @j=10;

USE tempdb
-- 创建测试表及其数据
if exists (select 1 from sysobjects where name = 'T' and type = 'U')
drop table T;
CREATE TABLE T(n tinyint);
INSERT INTO T SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 0
;
-- 组装语句
set @SQL1='select top '+ CAST(@X AS varchar) +' t1.n * '+ CAST(POWER(@j,@Y-1) AS varchar);
set @SQL2=' as nn from T t1';
WHILE @i<=@Y
BEGIN
set @SQL1 = @SQL1 + '+t' + CAST(@i AS varchar) + '.n*'+ CAST(POWER(@j,@Y-@i) AS varchar);
set @SQL2 = @SQL2 + ',T t' + CAST(@i AS varchar);
set @i=@i+1;
END
set @SQL3 = @SQL1 + @SQL2 + ' where t1.n>0 order by newid()';
-- 执行语句
EXEC sp_executesql @SQL3;
-- 删除测试
DROP TABLE T;

PL/SQL学习笔记(2):【上一篇】
v$session_event- Oracle Wait Interface Memo查看当前会话所有信息(转:http://www.dbanotes.net/archives/2004/12/vsession_event.html):【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • cron
  • 轻松交换Foxmail和Outlook的邮件
  • 网页之定时器详解
  • 架設 DNS(DNS终结篇)[13]
  • C#面象对象2
  • JSP的隱含物件Response
  • 什么是以太网
  • 基于SOA的微软机器人开发环境(1)
  • 整数类型和浮点类型的大小限制
  • 第一财经财经动向采集规则分享
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.