【问题标题】:Does identity column start at the specified seed标识列是否从指定的种子开始
【发布时间】:2019-06-23 07:46:37
【问题描述】:

参考下面附上的来自 SQL Server Management Studio 的图像,我已经有一个包含记录的表,最后一条记录有一个 id of 7。我希望将此列自动递增作为主键(就像在一些未知的东西之前所做的那样),显然下一条记录具有id of 8

将种子指定为 7 是否意味着下一条记录的 id 为 7?还是 (7 + incrementValue) 给出 8?

【问题讨论】:

  • @marc_s 我目前的情况不允许我按照您的建议对数据库和数据进行试验。而且我必须尽快完成,没有时间使用副本/虚拟表。不管怎样,在有人回答之前我就凭直觉走了:)

标签: sql sql-server database ssms


【解决方案1】:

SQL Server 足够智能,任何从 1 到 8 的值都只会从 8 开始。

例如,如果您将Identity Seed 设为1,并在表中插入一条记录,SQL 将仅将新的Identity 计算为8。

如果您在这种情况下指定 > 8,则只有它会考虑种子值。

注意:当您使用SSMS 来实现这一点时,内部表将被删除,并会创建一个具有正确标识的新表。

如果您想使用 sql 查询来执行此操作,则必须按照 answer 中提到的说明进行操作

【讨论】:

    【解决方案2】:

    假设你的表很大,那么你必须查询找到最大id

    只需这样做,

    DBCC CHECKIDENT ('TableName', RESEED, 1) 
    

    【讨论】:

      【解决方案3】:

      我认为 SQL Server 将强制您使用新标识重新创建表,并且您必须将数据转移到该表中,该表将从 1 开始并以 1 递增。

      【讨论】:

      • 不,它没有。您可以按原样修改表。但正如 PSK 提到的,在幕后创建了一个新表
      • 有趣的是,我收到一条消息说:不允许保存更改。您所做的更改需要删除并重新创建以下表。您对无法重新创建的表进行了更改,或者启用了阻止保存更改选项以要求重新创建表。
      • 您可以在此处找到该错误的覆盖:stackoverflow.com/a/6810442/870565
      猜你喜欢
      • 2017-07-04
      • 1970-01-01
      • 2010-10-18
      • 2021-07-19
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多