怎么让SQL生成不重复编号

手册/FAQ (451) 2016-04-13 14:31:26

产生不重复的编号方法很多

比如采用自增的字段,或获取max(id),另就是采用 update table set @id=id,id=id+1 (rowlock)方式之类的。

但如果考虑并发的话,在loadrunner之类的并发工具测试。

1) 获取自增的字段是可以的.

set @id=SCOPE_IDENTITY();

2) 直接采用max(id)这种是不行的,并发有重复号码.

3) 自己处理,update 这种可以,但是高并发容易跳号

create table Tb_NO(

name char(20) primary key,--待产生编号的表名

head nvarchar(10)not null default'',--编号的前缀,默认值为空

currentNo int not null default 0,--当前的编号数据

BHlen int not null default 6, --编号数字部分的长度

descript nvarchar(40))--对编号的描述

--向编号表Tb_NO中添加记录,记录客户投诉表中的编号信息

insert into tb_no select ' tbl Cus_com’,'TS',0,4,'客户投诉表编号'

--创建存储过程,产生新编号

create proc pro_nextNO

@Name char(20),--待产生编号的表名

@NO nvarchar(20) output --返回新编号

as

begin tran

update tb_no with(rowlock)

set @NO=head+right(power(10,BHlen)+currentNo+1,BHlen),

currentno=currentno+1

where name=@Name

commit tran

go

THE END