SQL 重新播种有效,但自动增量从 0 开始

标签 sql identity

我有一些表有一个身份列,我正在尝试重新设定。重新播种有效(我认为)但是当一个新数据项插入到表中时,标识列从 0 开始。

我要重新播种的代码是:

DBCC CHECKIDENT(MyTable, RESEED, 0)

表的身份规范是:

  • 身份增量 = 1
  • 身份种子 = 1

  • 快速说明 我在重新播种之前对表执行删除操作

    请帮忙

    最佳答案

    当种子被初始化为 0 时,“未初始化”或截断的表(意味着没有数据被插入到表中)似乎将从 0 开始。但是当数据被插入到表中并且使用删除来清除所有表的行。重新播种为 0 只会使数据库的最后一个种子为 0,而下一个种子为 1。

    也就是说,这里是一个复制问题的例子:

    -- Script to create a test table
    IF EXISTS(SELECT 1 FROM Information_Schema.Tables WHERE TABLE_SCHEMA = 'dbo' 
                AND TABLE_NAME = 'SeedTest') BEGIN
    
        DROP TABLE SeedTest
    
    END
    
    -- Create a Test Seed Table
    CREATE TABLE [dbo].[SeedTest](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [Value] [varchar](255) NOT NULL,
     CONSTRAINT [PK_SeedTest] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    ) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    
    -- When a table is truncated or "Not Initialized" (meaning no data EVER inserted)
    -- An initial reseed of 0 will make the first identity insert value = 0.
    DBCC CHECKIDENT (SeedTest, RESEED, 0)
    
    GO
    
    INSERT INTO SeedTest([Value]) VALUES('Test')
    SELECT * FROM SeedTest
    
    GO
    
    -- If you truncate the table and reseed the same effect will occur (first identity insert value = 0).
    TRUNCATE TABLE SeedTest
    
    GO
    
    DBCC CHECKIDENT (SeedTest, RESEED, 0)
    
    GO
    
    INSERT INTO SeedTest([Value]) VALUES('Test')
    
    SELECT * FROM SeedTest
    
    
    -- When Deleting records from a table (Foreign key constraints may prevent a truncate)
    -- Reseeding to 0 will set the last seed to 0 and make the next seed = 1
    DELETE FROM SeedTest
    
    GO
    
    DBCC CHECKIDENT (SeedTest, RESEED, 0)
    
    GO
    
    INSERT INTO SeedTest([Value]) VALUES('Test')
    SELECT * FROM SeedTest
    
    GO
    

    关于SQL 重新播种有效,但自动增量从 0 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168075/

    相关文章:

    push - Firebase:如何为 key 生成唯一的数字ID?

    mysql - 通过在一个简单的表上使用 MySql 进行三次计数和分组......是否可以在一个查询中进行?

    mysql - 我可以在位类型列中插入什么值?

    java - 用where条件选择sql中的所有数据?

    sql-server - tadoquery 发布 : "cannot update non-nullable column with null" on identity column

    python - 如何形成矩阵恒等式?

    sql - 带 Hibernate 的组合框

    java - ORA-01861 : literal doesn't match format string

    java - Java 是否保证 Object.getClass() == Object.getClass()?

    asp.net - 如何授予身份 ApplicationPoolIdentity 读取我站点内文件夹的权限