找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 7000|回复: 2

[原]sql 生成不重复编号

[复制链接]
发表于 2012-5-2 13:40:28 | 显示全部楼层 |阅读模式
产生不重复的编号方法很多
比如采用自增的字段,或获取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 原文链接

发表于 2013-3-15 09:43:56 | 显示全部楼层
数据库很重要,不错
 楼主| 发表于 2013-4-21 13:08:21 | 显示全部楼层
刷新,冲刷垃圾信息标题。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-3-28 21:59 , Processed in 0.014894 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表