Sql 对于Id较大的行,是否使用DBCC CHECKIDENT safe重置主键
我有一个主键为整数值的表,它一个接一个地自动递增,表中的值一直很好,直到116,突然过了一会儿,它从10085值继续 我不知道为什么,但也许我做了一个心理医生数据库。但无论如何,我知道DBCC CHECKIDENT命令 我的问题是,如果我运行Sql 对于Id较大的行,是否使用DBCC CHECKIDENT safe重置主键,sql,sql-server,tsql,primary-key,dbcc,Sql,Sql Server,Tsql,Primary Key,Dbcc,我有一个主键为整数值的表,它一个接一个地自动递增,表中的值一直很好,直到116,突然过了一会儿,它从10085值继续 我不知道为什么,但也许我做了一个心理医生数据库。但无论如何,我知道DBCC CHECKIDENT命令 我的问题是,如果我运行DBCC CHECKIDENT(mytable,RESEED,116),它是否会在将来损害Id为100085的行? 我的意思是,当有一天我的行数达到100084时,sql server会从其他Id跳转,还是会抛出异常以插入重复Id?不建议使用以下命令 DBC
DBCC CHECKIDENT(mytable,RESEED,116)
,它是否会在将来损害Id为100085的行?
我的意思是,当有一天我的行数达到100084时,sql server会从其他Id跳转,还是会抛出异常以插入重复Id?不建议使用以下命令
DBCC CHECKIDENT (mytable, RESEED, 116)
因为当您的行达到100084时,它将抛出异常
欲了解更多信息,请阅读以下内容。它表示建议从表中删除所有行。如果要使用DBCC CHECKIDENT重新设定表种子,请不要执行此操作 当标识列达到100084时,它将抛出重复键异常 它不会神奇地跳过以前生成的值以避免冲突。你可以很容易地从下面看到这一点
CREATE TABLE mytable
(
x INT IDENTITY PRIMARY KEY,
Y INT
)
INSERT INTO mytable
(Y)
SELECT TOP (200) number
FROM master..spt_values
DELETE FROM mytable
WHERE x BETWEEN 1 AND 150;
DBCC CHECKIDENT (mytable, RESEED, 1)
/*Works OK*/
INSERT INTO mytable
(Y)
SELECT TOP (149) number
FROM master..spt_values
/*Error*/
INSERT INTO mytable
(Y)
SELECT TOP (10) number
FROM master..spt_values
Msg 2627,第14级,状态1,第25行违反主键
约束“PK_uumytable_uuu3BD019E5518439DD”。无法插入重复项
输入对象“dbo.mytable”。重复的键值为(151)。这个
声明已终止