【问题标题】:SQL don't increment primary key on INSERT errorSQL 不会在 INSERT 错误时增加主键
【发布时间】:2011-05-29 12:30:01
【问题描述】:

今天有点惊讶地发现,当插入语句出错时,我的自动递增主键仍然会递增,结果是我们的表中有“缺失”数字。

这样设计 SQL 有什么原因吗?有没有办法覆盖这种行为?

我正在通过 Linq-to-SQL 访问。

【问题讨论】:

  • 为什么“丢失”数字如此重要?可能有一种方法可以覆盖,但听起来更像是您在处理身份功能之前需要解决的问题。
  • 这很重要,因为我的老板抱怨它:)
  • 告诉你的老板这是正常行为,试图用手动系统覆盖它会给数据带来风险。通常没有正当理由不期望有差距。
  • 删除记录时也会出现空白。重新分配这些数字可能会损害数据完整性。

标签: linq-to-sql sql-server-2008 error-handling primary-key auto-increment


【解决方案1】:

这是为了处理并发性并使其尽可能快的设计(如果同时发生 3 次插入并且回滚 1 次会发生什么......这会搞砸一切)......当插入开始时 sql服务器确定身份的值..如果发生回滚,这些值不会被重用..除非您想在每次回滚后运行 DBCC CHECKIDENT,否则您无能为力

如果您需要一个可以识别差距的查询,请查看此How to return all the skipped identity values from a table in SQL Server

SQL Server 的下一个版本将包含sequences,这可能会帮助您解决其中的一些问题,请看这里:A first look at sequences in SQL Server Denali

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2023-02-23
    相关资源
    最近更新 更多