我有一些表有一个身份列,我正在尝试重新设定。重新播种有效(我认为)但是当一个新数据项插入到表中时,标识列从 0 开始。
我要重新播种的代码是:
DBCC CHECKIDENT(MyTable, RESEED, 0)
表的身份规范是:
快速说明 我在重新播种之前对表执行删除操作
请帮忙
最佳答案
当种子被初始化为 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/