8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

SQL Server 数据库中标识增量正在跳跃

haifisch123 1月前

44 0

在我的其中一个表“ReceiptNo”中的费用中,SQL Server 2012 数据库标识增量突然开始跳转到 100 而不是 1,这取决于以下两件事。如果它是 1205446 我...

在我的其中一个表 Fee 中,SQL Server 2012 数据库标识增量的列'ReceiptNo'突然开始跳转到 100 而不是 1,这取决于以下两件事。

  1. p2

  2. p3

enter image description here

帖子版权声明 1、本帖标题:SQL Server 数据库中标识增量正在跳跃
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由haifisch123在本站《t-sql》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 无论规模大小,这仍然是许多开发人员和应用程序中的一个非常常见的问题。

    不幸的是,上述建议并不能解决所有情况,例如共享主机,您不能依赖主机来设置 -t272 启动参数。

    此外,如果您现有的表使用这些标识列作为主键,则删除这些列并重新创建新列以使用 BS 序列解决方法将是一项巨大的努力。序列解决方法仅适用于在 SQL 2012+ 中从头开始设计新表的情况

    底线是,如果您使用的是 SQL Server 2008R2,那么请继续使用它。认真地,继续使用它。除非微软承认他们引入了一个巨大的错误(即使在 SQL Server 2016 中仍然存在),否则我们不应该升级,直到他们拥有并修复它。

    微软直接引入了一项重大更改,即他们破坏了一个不再按设计工作的 API,因为他们的系统在重新启动时会忘记其当前身份。无论有没有缓存,这都是不可接受的,名为 Bryan 的微软开发人员需要拥有它,而不是告诉全世界它是“设计使然”和“功能”。当然,缓存是一项功能,但忘记下一个身份应该是什么,就不是一项功能了。这是一个该死的 BUG!!!

    我将分享我使用的解决方法,因为我的数据库位于共享托管服务器上,而且,我不会删除并重新创建主键列,这将是一个巨大的 PITA。

    相反,这是我的可耻的黑客行为(但不像微软引入的这个 POS 漏洞那么可耻)。

    破解/修复:

    在插入命令之前,只需在每次插入之前重新播种您的身份即可。仅当您对 Sql Server 实例没有管理员控制权时才建议使用此修复程序,否则我建议在重新启动服务器时重新播种。

    declare @newId int -- where int is the datatype of your PKey or Id column
    select @newId = max(YourBuggedIdColumn) from YOUR_TABLE_NAME
    DBCC CheckIdent('YOUR_TABLE_NAME', RESEED, @newId)
    

    只需在插入之前添加这 3 行,就可以了。它实际上不会对性能产生太大影响,也就是说,它不会引人注意。

    祝你好运。

返回
作者最近主题: