怎样避免重复的编号。

ctrlqrj 2005-01-10 11:58:22
在多用户的环境中,编号是格式是yyyymmdd0001开始,现在小弟的办法是先获取当天最后的编号再加一,然后再用query insert入数据库, 可是这样总会有编号重复发生。
看了网上的资料,大体有个认识,是不是应该用存储过程来处理。具体如何做。比如在DELPHI中怎样调用的问题。
...全文
207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctrlqrj 2005-01-18
  • 打赏
  • 举报
回复
感谢大家的热心帮忙,虽然还未找到理想的办法。
to kirao(bryan):如果你机器多几台的话,还要是商场收银的,你就知道机率有多大了。
对于锁定表的想法,又怕死锁。

对此我想会不会用异常再加上编号设为主键来搭配,效果不知道如何,或有些什么别的好想法。
oursaviour 2005-01-11
  • 打赏
  • 举报
回复
create table UniqueID(fDate char(8),fSerialNo int)
go
create procedure GetUniqueID(@ID varchar(20) output)
as
declare @strDate char(8)
set @strDate=convert(char(8),getdate(),112)
if (not exists(select 1 from UniqueID where fDate=@strDate))
insert into UniqueID (fDate,fSerialNo) values(@strDate,0)
update UniqueID set fSerialNo=fSerialNo+1 where fDate=@strDate
select @ID=fDate+convert(varchar(20),fSerialNo) from UniqueID where fDate=@strDate
go


long_205 2005-01-11
  • 打赏
  • 举报
回复
create table UniqueID(fDate char(8),fSerialNo int)
go
create procedure GetUniqueID(@ID varchar(20) output)
as
declare @strDate char(8)
set @strDate=convert(char(8),getdate(),112)
if (not exists(select 1 from UniqueID where fDate=@strDate))
insert into UniqueID (fDate,fSerialNo) values(@strDate,0)
update UniqueID set fSerialNo=fSerialNo+1 where fDate=@strDate
select @ID=fDate+convert(varchar(20),fSerialNo) from UniqueID where fDate=@strDate
go

631799 2005-01-11
  • 打赏
  • 举报
回复
--引用雏建

--创建一个编码表
create table tb(编号 int,t rowversion)
insert tb(编号) select '0' --当前编号
go

--创建一个取编号的存储过程
create proc p_getbh
@编号 varchar(10) out
as
declare @a rowversion
select @编号=编号+1,@a=t from tb
update tb set 编号=@编号 where t=@a
if @@rowcount=0
raiserror('编号被抢占',1,16)
go

--调用存储过程取编号
declare @编号 varchar(10)
exec p_getbh @编号 out
select @编号
go

--删除测试
drop table tb
drop proc p_getbh
kirao 2005-01-11
  • 打赏
  • 举报
回复
如果你是在update時間去取id號,應該是不會重復的,如果發生機率是相當小,我還沒有遇到過!
suntt 2005-01-11
  • 打赏
  • 举报
回复
有编号重复发生,是因为没有作read锁定,最好是建立一个单独表用来维护编号
xluzhong 2005-01-11
  • 打赏
  • 举报
回复
delphi 中用adoquery 或者 storedproc 可以调用!
一、开发背景 传统的合同管理,多采用手工的形式,既繁琐又易于出差错,随着电子技术的发展,合同进行信息化管理,避免进行简单的重复,从而做到准确、快捷。为了适应这个要求,我们工作组经过详细的市场调查,发现市面上合同软件繁多,竞争激烈,为了避免重复生产类似的软件产品,做出自己的特色,我们决定做一个切合单位合同管理实际要求的合同管理系统软件。 二、选题的意义 为了更好地适应工作人员对合同管理系统的需求,缓解手工管理存在的弊端,开发合同管理系统。合同管理系统向用户提供的服务将在传统的“录入-修改-删除-查找”基础上,进一步提供全方位的信息服务。它具有以下几个特点: (1)可以存储所有合同的资料,具有安全、高效的特性; (2)只需1名合同信息录入人员即可操作本合同管理系统,可以节省大量的人力和物力。 (3)可以通过查询系统迅速查到所需要的信息。 在对合同管理系统的流程进行认真系统的分析后,我认为本系统用户的需求可以分为3个方面:第1方面是用户登录管理。只有有权限的用户才能进入本系统,没有权限的用户或非法用户不能进入本系统,从而有效地保证系统的安全。第2方面是合同信息的查找。能够对合同的具体信息进行查找。可以提供按时间范围查找、按所属部门查找、按合同编号查找、按客户名称查找、按合同类别查找、按模糊条件查找。第3方面也是合同管理系统的核心工作,即合同基本信息录入。能够对合同的基本信息进入录入,包括合同的编号、合同的类别、合同名称、合同部门、所属部门、合同开始日期、合同结束日期、合同额等。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧