在删除SQL Server 2008 Express中的行后是否可以重用标识字段值?这是一个例子。假设我有一个表,其中Id字段作为主键(标识)。如果我添加五行,我将有这5个ID:1,2,3,4,5。如果我要删除这些行,然后再添加5行,新行将有ID:6,7,8, 9,10。是否可以让它再次从1开始?
我是否必须从另一个表中删除数据才能完成此操作?谢谢你的帮助。
答案 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值是什么。他们不连续的事实并没有伤害任何事情。