sql 生成不重复编号

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

比如采用自增的字段,或获取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

 

你可能感兴趣的:(sql,server)