日期:2014-05-17  浏览次数:20466 次

如何查询一段序列数字中缺少的数字的语句
每张单子都有个编号,这个编号会随着新增单子而越来越大(MAX + 1)。
但如果从中间删除了某个单子,中间就断了,
现在客户要求在新增时需要补充被删除的编号。

现在有这样一段记录
编号
00009
00005
00004
00003
00001
这里要如何查询出当前应补充的编号为00002呢?如果补充了2之后。
00009
00005
00004
00003
00002
00001
下一次查询就是应该是00006了。
这里因为是新增时的触发器,所以需要效率,不能用遍历的方式。最好是一条语句搞定。求教,谢谢!

------解决方案--------------------
用row_number函数排序,然后提取最小的对不上的编号就行。
------解决方案--------------------
想最快,那就在删的时候,把号存起来
------解决方案--------------------
给你提供一个思路,具体的自己现实。
1,建一个用聚集索引字段ID的表TB1, 专门用来存放被删除的编号,每次删除的时候把删除的编号放入此表。
2,每次新增的时候去TB1提取一条记录,Select top 1 Id From TB1 order By Id, 由于是聚集索引,所以速度很快,插入之后再删除TB1中提取的那条记录。

整个过程注意并发的控制。