如何取得可用的编号?

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:34:42
在SQL SERVER中,我有一个字段是唯一索引的int,但不是自增

现在要达到这样的功能:如果已有 1,2,3,5,8 这个系列,下次添加纪录有,希望可以取到4

除了取出来做循环外,还有更准确有效的方法吗?

这种用法的确是经常遇到的,用循环的办法确实效率太低。如果能够预测该索引值的取值范围,那么可以使用以下办法:
1.建立一个只有一个字段的参考表ReferTable,其字段名为ReferSN。
2.假设你的索引值取值范围为1~999,那么就向这个表插入999条记录,这些记录的ReferSN字段的取值依次为1,2,3,4,5,6,...,998,999也就是说使1~999这些整数都存入该表中。(这个表只需创建和填充一次,供以后查询调用)
3.假设你的数据表为表DataA,索引字段为SN。那么取最小可用号码的语句为:Select min(ReferSN) from ReferTabel where ReferSN not in(Select SN from DataA)

这个办法的关键是参考表的确定,其范围必须足够大,一定要使你的索引值都落在该表中,否则可能在执行最小可用号查询时返回空值,造成没有号码可用。

不要用sql写了,太麻烦,而且效率不高
建议两种方式解决:
1、补上断掉的数据和最大号后面还未使用的第一笔数据,并打上未使用标志,下次取的时候先按照标志取最小值即可;
2、建立一张数据表记录断掉的数据和最大号后面还未使用的第一笔数据,从这张表中取
这两种方式执行效率都比较高