删除行后重用标识值

时间:2010-11-26 19:34:04

标签: sql sql-server tsql sql-server-2008 identity

在删除SQL Server 2008 Express中的行后是否可以重用标识字段值?这是一个例子。假设我有一个表,其中Id字段作为主键(标识)。如果我添加五行,我将有这5个ID:1,2,3,4,5。如果我要删除这些行,然后再添加5行,新行将有ID:6,7,8, 9,10。是否可以让它再次从1开始?

我是否必须从另一个表中删除数据才能完成此操作?谢谢你的帮助。

3 个答案:

答案 0 :(得分:21)

您可以使用以下方法设置IDENTITY值:

DBCC CHECKIDENT (orders, RESEED, 999)

这意味着你必须根据每个DELETE运行语句。这应该开始强调为什么这是一个坏主意......

数据库不关心顺序值 - 仅用于演示。

答案 1 :(得分:9)

如果要在删除所有行后重置身份,请执行以下操作之一

--instead of delete, resets identity value
TRUNCATE TABLE orders

--or if TRUNCATE fails because of FKs, use this after DELETE
DBCC CHECKIDENT (orders, RESEED, 1)

否则,内部值无论是否有差距都无关紧要。

答案 2 :(得分:6)

默认情况下,

identity字段不会重复使用旧值。您可以使用dbcc checkident重新设置它们,但不建议这样做,因为如果重新设置低于表中仍存在的值,您将获得密钥违规。一般来说,你不应该关心PK值是什么。他们不连续的事实并没有伤害任何事情。