如何按顺序获取下一个可用号码? [复制]

Posted

技术标签:

【中文标题】如何按顺序获取下一个可用号码? [复制]【英文标题】:How to get the next available number in sequence? [duplicate] 【发布时间】:2019-04-24 15:13:10 【问题描述】:

表有一个计数器字段。 当记录被删除时,计数器编号再次可用。 新记录必须使用最低的可用“槽”作为计数器。

例子:

Material | Counter    
00AF10 | 02    
00AF11 | 03    
00AF12 | 04  

在这种情况下,新插入的记录将采用计数器编号“01”和之后的新记录,即计数器编号“05”。

我尝试过选择最大计数器 + 1 作为新记录,但这当然无法满足在计数器序列中使用可用“插槽”的要求。我正在熬夜,我的大脑被炸了。你能帮忙吗?

【问题讨论】:

不要这样做!!!这将是一场性能噩梦。这些值没有差距真的很重要吗? @Jodrell 不幸的是,是的。业务要求如此:( 使用标识列生成递增的数字(可能有间隔)...在报告中使用 row_number 而非按标识排序来生成无间隔的数字。 如果你连续DELETE,你想发生什么?重新编号每一行,并可能在参照完整性崩溃时破坏所有内容? 你经常会发现“业务需求”和业务需求是不同的东西。他们很可能不需要它,而且这是“很高兴拥有”,但只是出于多余的原因。 IDENTITY 列的值通常不会暴露给用户,因此它的值对于数据库引擎以外的任何东西都毫无意义。 【参考方案1】:

你不应该这样做,这是一个坏主意,不仅在技术上而且在商业上也是如此,它没有什么意义,也没有提供真正的好处。

但是,如果您确实必须这样做,并且无法选择其他工作。

我会创建一个包含两列的新表,一列用于连续值,另一列是您的其他数据的外键,可能会被删除。

然后您可以使用可怕的跨国触发器来处理删除和插入,但至少您将能够正确地为您的新表建立索引。

【讨论】:

以上是关于如何按顺序获取下一个可用号码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python身份证号换成***

python实现获取身份证号码的方法

IOS 复制粘贴号码到input,点击后获取不了值

cProfiler:如何按执行顺序获取统计信息?

如何按插入的顺序获取 NSManagedObjects?

如何在 Core Data 中按顺序存储数据? [复制]