【问题标题】:Identity Column Seems to Skip Values [duplicate]身份列似乎跳过值[重复]
【发布时间】:2014-07-14 10:26:14
【问题描述】:

我在 sqlserver 2012 中创建了一个表,主键 ID 开启了标识,我发现它插入的值从 1 变为 55,然后跳转到 1056。

为了明确,它返回的 ID 如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 1056

发生这种情况的原因是什么?

【问题讨论】:

    标签: sql-server identity-column


    【解决方案1】:

    通常,这表明您不小心创建了一堆行,然后又删除了它们。我之前通过考虑不周的循环甚至只是糟糕的应用程序逻辑发生了这种情况。无论如何,它是由从表中删除记录引起的。它也可能是由手动更改身份种子引起的,但除非您有意尝试这样做,否则它不太可能发生。特别是如果您与一个可以访问数据库的团队一起工作,很可能有人犯了一些小错误,浪费了一些价值。我相信这没什么值得担心的。

    快速的内联编辑:我看到你找到了对 a "bug" 的引用,它确实做到了这一点。我没有意识到这一点,但它确实解释了这一点。不过,我的观点仍然成立。在大多数情况下,这真的没有什么值得担心的。

    话虽如此,您可以重置标识列,搜索肯定会告诉您如何执行此操作。您也可以只删除该列并重新添加它。但是当这种事情发生时,我通常会忽略它。无论如何,如果您要达到 2^31 条记录,那一千将不会有任何真正的区别,并且任何编写良好的程序都不需要 ID 采用任何特定格式或在任何特定限制下工作。

    【讨论】:

    • 我没有删除任何行。但它自己跳到1056?我不知道。我已经关注了这个链接,但仍然有问题。 codeproject.com/Tips/668042/…
    • 嗯,这很有趣。我没有意识到这一点。我从未见过这种情况发生,但显然这是可能的。好吧,我的观点仍然成立:除非您打算打算向用户展示这些值,否则真的没有必要惊慌,如果您可以避免,我建议您不要将其作为一般规则。它通常很混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2013-08-07
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多