我有一些表,有一个标识列,我尝试种。补种工作(我认为),但是当一个新数据项插入到表中标识列在0SQL重新播种工作,但自动增量从0开始
我的代码开始补种是:
DBCC CHECKIDENT(MyTable的,RESEED,0)
为表中的身份的规格是:
- 标识增量= 1
- 标识种子= 1
快速注我要补种
执行对表一个删除前请帮
我有一些表,有一个标识列,我尝试种。补种工作(我认为),但是当一个新数据项插入到表中标识列在0SQL重新播种工作,但自动增量从0开始
我的代码开始补种是:
DBCC CHECKIDENT(MyTable的,RESEED,0)
为表中的身份的规格是:
快速注我要补种
执行对表一个删除前请帮
使用该命令,你告诉身份来为自己回0作为其新的种子。
它会不是回到原始定义(IDENTITY(1,1)
),而是返回到您在DBCC命令中指定为第三个参数的值。
如果你想回去使用1作为种子值,使用:
DBCC CHECKIDENT(MyTable, RESEED, 1)
如果你想去100,使用:
DBCC CHECKIDENT(MyTable, RESEED, 100)
你定义的那个值并通过使用DBCC CHECKIDENT
进行设置,那么当您向该表中插入一行时,将成为用于IDENTITY
列的第一个新值。
当您检查MSDN Books Online documentation,你可以看到:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ ,new_reseed_value ] } } ]
)
new_reseed_value
是作为标识列的当前值以使用新的价值。
所以这真的是你谁定义了IDENTITY
列的新价值 - 如果你在0通过为您在您的文章做,这将是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
我知道你在寻找的是:
DBCC CHECKIDENT(MyTable, RESEED, -1)
这是只有在表已经增加,也就是行已被添加,然后被删除。接下来插入的行现在将增加给予0
在这种情况下该表没有行,使用: DBCC CHECKIDENT(MyTable的,RESEED,0)
如果您不需要记录,你可以发出TRUNCATE TABLE语句。它会删除记录并将身份开始回到原始身份种子。 – 2010-07-02 18:53:33
不幸的是,大多数表都有外键约束,所以截断它们将不起作用。 – mattgcon 2010-07-06 15:52:23
同样的事情发生在我身上。这是因为我截断了表而不是删除它。 – 2014-03-20 10:27:47