【问题标题】:SQL Server identity column inserted 0 value with seed of 1SQL Server 标识列插入了 0 值,种子为 1
【发布时间】:2016-10-18 07:55:26
【问题描述】:

这与问题有些相关:SQL server identity column values start at 0 instead of 1

但我不确定这里发生了什么。我们有我们用来启动客户帐户的“空白”数据库。我们通过备份和恢复数据库来做到这一点。

客户在恢复后得到完全空白的表格。表格示例,我们所有表格的 PK 都与此一模一样:

CREATE TABLE [dbo].[RNPRatePlanStop]
(
    [RatePlanStopKey] [int] IDENTITY(1,1) NOT NULL,
    [RatePlanKey] [int] NOT NULL,   
    .....
)

插入新记录时偶尔(并非总是在所有表上) - 0 未插入 1。我不确定如何解决此问题或我做错了什么。这会导致 UI 出现问题,因为我们不指望拥有 0 键..

【问题讨论】:

  • 您可以使用truncate table [dbo].[RNPRatePlanStop] 这会重置为标识列定义的种子值。使用它来截断您想要将其身份重置为默认种子的所有表。
  • 我还要在这里指出,如果您的主键只是 RatePlanStopKey,则仅在其上添加 IDENTITY() 并不能保证唯一性。您可以向其中添加 PRIMARY KEY 以保证这一点。您可以参考:msdn.microsoft.com/en-us/library/ms186775.aspx 了解更多信息。但是,如果您使用的是复合键,那就另当别论了。
  • Ryan,我省略了有问题的表 DDL 的其余部分,但是是的,它是 PK。我已经找到问题了,我会给出我的答案
  • @TudorSaru,不幸的是,如果桌子上有 FK,这将不起作用。

标签: sql sql-server-2008 auto-increment identity


【解决方案1】:

当我运行这样的命令时,声明也是 IDENTITY(1,1):

SELECT IDENT_CURRENT('RNPRatePlanStop')

它返回 0。对于这个表和大约 7 个其他表。不知道这怎么可能,可能是因为 IDENTITY 是后来通过脚本应用的。

解决方案是在这些表上“播种”正确的身份:

DBCC CHECKIDENT(RNPRatePlanStop, RESEED, 1)

在那之后 - 他们都正确重置并且一切都很好。仍然是个谜

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多