winston 发表于 2012-5-2 13:40:28

[原]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



作者:hliq5399 发表于2012-4-28 17:39:02 原文链接

freeeyes 发表于 2013-3-15 09:43:56

数据库很重要,不错

winston 发表于 2013-4-21 13:08:21

刷新,冲刷垃圾信息标题。
页: [1]
查看完整版本: [原]sql 生成不重复编号