怎样避免重复的编号。

ctrlqrj 2005-01-10 11:58:22
在多用户的环境中,编号是格式是yyyymmdd0001开始,现在小弟的办法是先获取当天最后的编号再加一,然后再用query insert入数据库, 可是这样总会有编号重复发生。
看了网上的资料,大体有个认识,是不是应该用存储过程来处理。具体如何做。比如在DELPHI中怎样调用的问题。
...全文
214 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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 可以调用!

34,838

社区成员

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

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