mssql如何生成一个唯一的7位数

mssql如何生成一个唯一的7位数,第1张

建议创建存储过程

create proc suijishu

@weishu int,@hangshu int

as

declare @temp table

(

id int identity(1,1),

zhi varchar(10)

)

declare @js int

declare @zhi varchar(10)

declare @i varchar(10)

declare @j int

set @j=0

while 1=1

begin

--唯一的随机数插入表@temp

set @zhi=''

while 1=1

begin

set @i =''

set @j=round(rand()*10,0)

--如果是10就置为0

if @j>=10

set @j=0

set @i=rtrim(convert(varchar(10),@j))

set @zhi=@zhi+@i

if len(rtrim( @zhi))>=@weishu

break

end

--判断是否唯一

if not exists(select * from @temp where zhi=@zhi)

insert @temp values(@zhi)

select @js=count(*) from @temp

if @js>=@hangshu

break

end

select * from @temp

例如:产生5个不重复的7位随机数

exec suijishu 7,5

传两个参数,

第一个参数:每个随机数的位数

第二个参数:产生随机数的个数

结果:

id zhi

1 9049637

2 0788233

3 7486321

4 5466539

5 2484970

确保不重复的情况下 给这个键做索引 或者 在匹配步骤上将数据库的所有数值分批次取出存入到缓存中 利用高IO去完成匹配。

另外 关于 7位数字的生成 可以以1000000为基础去自增的形式生成。按照你的随机数理念 越到后面count的效率越低。

换一种思路,看下面代码(其实能够使用数据库sql语句的话,更简单,临时表,两个字段,一个字段插入随机guid,一个插入字段数1--35。用guid排序取前7个):

import java.util.Date

import java.util.Random

/* * 随即排列数组,给定一个数组,随即排列其中的元素,目前主要有两种方法 */

public class RandomSort {

public static void main(String args[]){

//生成一个数组,并赋值。1-35.

int data[]=new int[35]

for(int i=0i<35i++)

{

data[i] = i+1

}

//把数组打乱

randomizeInPlace(data)

//显示打乱后的数据

show(data)

//show(data)可以稍微修改为,显示前7个数。这里就不写了,你自己写吧

}

/*

* 元素data[i]是从 元素data[i]到data[n]中随机选取的

*/

private static void randomizeInPlace(int[] data)

{

Date dt=new Date()

Random random=new Random(dt.getSeconds())

int len=data.length

for(int i=0i<leni++)

{

int pos=(int)(random.nextDouble()*(len-i+1)+i)-1

int temp=data[i]

data[i]=data[pos]

data[pos]=temp

}

}

private static void show(int[] data)

 {

System.out.println("========================")

for(int i = 0i <data.lengthi++)

{

System.out.print(data[i] + "")

}

System.out.println()

System.out.println("========================")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10000752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存