SQL重新设定有效,但自动增量从0开始

mat*_*con 3 sql identity

我有一些表,我有一个标识列,我试图重新种植.重播工作(我认为)但是当一个新的数据项插入到表中时,标识列从0开始.

我重新编写的代码是:

DBCC CHECKIDENT(MyTable,RESEED,0)

表的标识规范是:

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

快速注意我在重新播种前对表格执行删除操作

请帮忙

小智 6

当种子初始化为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
Run Code Online (Sandbox Code Playgroud)