自动补充断号(100分)

  • 主题发起人 主题发起人 waves9383
  • 开始时间 开始时间
W

waves9383

Unregistered / Unconfirmed
GUEST, unregistred user!
一个表的中的 ID 要求连续编号,使用过程中出现了断号,现在要把断号补上,应如何实现?
例如:表A 中的ID 1,2,3,4,5, 现在3被删除了,在新增时要补上编号"3".
 
删除的号,要在另一个表中保存,就很容易知道断了哪些号了.
而不是现用现查,效率肯定跟不上的.
 
一个笨办法:将4、5导出到一个临时表,删除4、5,压缩数据库,添加3,再导回临时表
 
表A建立一个 for Delete 触发器,一旦删除记录(如果不是最后一条记录),把表A中最后一条记录的 ID 改为刚被删除记录的 ID。
 
删除后,此记录做个标志.下次可以使用
 
同意楼上的 加个标志位比较简单
也就是实现软删除
 
大概写了一下,没测试。效率不高。

declare @mincnt int
declare @maxcnt int
select @mincnt=min(id) from table1
select @maxcnt=max(id) from table1
while @mincnt<=@maxcnt
begin
if Exists (select * from table1 where id not in (@mincnt))
begin
insert into table1(id) values(@mincnt)
end
set @mincnt = @mincnt +1
end
 
如果这个编号是单号,在某些情况下补上是有问题的
如用户删除了某张单,这个单号是不应该被补上的

建议:
1. 不要用单号作为表关联,用GUID吧,好用得多
2. 可以做一个流水账号的表,取号,作为单据编号
3. 建立流水号缓存表
4. 控制过程
新建单据,取号,将新号放入缓存表,保存单据,判断是否有重复,无则保存成功,否则提示用户或再取下一号;
如果用户取消,则缓存表中的号码可以再用;
如果用户新建单据取号后,长时间没再进行操作,则系统设置时限,超过该号可再用;
当然,如果用户喜欢单号加前缀、后缀,一样可以做到连号;
 
加个删除标志比较好,逻辑上也好管理
且方便实现回收站功能
 
后退
顶部