如何按顺序获取下一个可用号码? [复制]
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】:
你不应该这样做,这是一个坏主意,不仅在技术上而且在商业上也是如此,它没有什么意义,也没有提供真正的好处。
但是,如果您确实必须这样做,并且无法选择其他工作。
我会创建一个包含两列的新表,一列用于连续值,另一列是您的其他数据的外键,可能会被删除。
然后您可以使用可怕的跨国触发器来处理删除和插入,但至少您将能够正确地为您的新表建立索引。
【讨论】:
以上是关于如何按顺序获取下一个可用号码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章