SQL增量很少不正确

时间:2017-06-22 21:18:53

标签: sql

我正在努力维护一个票务系统以跟踪工作订单号码,并且每隔一段时间就会跳过WO_NUM跳数。 WO_NUM应与WOID相同。但由于某些原因,在使用该系统多年后,WO_NUM开始比WOID大1。

The count for WO_NUM jumps by 2 instead of 1 from WO_NUM 229912 to WO_NUM 229914

然后几个月后(128天)确切地说,这次再次跳跃到比WOID大2。

The count for WO_NUM jumps from 239946 to 239948

这种情况在18天后再次发生,但这次比WOID大3,WO_NUM从241283跳到241285,而WOID通常从241281增加到241822

7天后再次比WOID大4,WO_NUM从241897跳到241899,而WOID通常从241894增加到241895.

这似乎越来越远,而且他发生的事情几乎快得多了。知道为什么这可能是/我如何修复它?

2 个答案:

答案 0 :(得分:3)

如果您在SQL Server中使用IDENTITY字段或在其他系统中使用类似的自动增量机制,则无法保证您的ID将是连续的。如果您尝试插入新行并且插入失败,则会跳过将使用的ID。这是为了允许另一个插入开始,而另一个插入正在进行而没有ID冲突。

如果你需要(不是想要)ID是有效的,那么你可以做以下事情:

  • 创建一个锁定机制,以便插入是原子的。
  • 使用一个密钥表来存储表格的下一个可用ID
  • 如果插入成功,则仅递增密钥表。

尽管如此,显然这会给您的系统带来很多风险,并且无法解决在删除记录时会发生什么。我会重新考虑您是否需要连续ID以及该功能是否值得额外开发和开销。

答案 1 :(得分:0)

自己想通​​了。事实证明,如果工作订单已启动,然后在未保存的情况下取消,则WO_NUM正在递增并且不会回滚。感谢所有想要帮助的人,抱歉,我没有提供必要的信息。我下次确保做得更好!