我有点问题。
我有50行标识列id-自动增量。所以,第一行有id 1,最后一行有id 50.然后,我删除1到25之间的行,现在我有id为26-50的行。
问题:
我怎么能“重新启动”这些行(26-50)到(1-25)?我不需要表中的空id。 THX。
SQL Server 2008
答案 0 :(得分:4)
DBCC CHECKIDENT('your_table', RESEED, 0)
下一个值将是你用+ 1重新设置的值,所以在这种情况下我将它设置为0,以便下一个值为1.
的更多详情答案 1 :(得分:4)
我不建议这样做。
标识列的目的不是生成外观漂亮的数字,而是用于标识数据的唯一值
如果在另一个表中引用了标识列,则不能仅在不破坏引用的情况下更改表中的值。
如果你仍然坚持这样做:
您可以使用DBCC CHECKIDENT
“重置”身份计数器:
SQL Server - reset identity field
请注意,如果表格中仍有数据,则无法执行此操作,如here所述 您可以通过将数据临时复制到另一个表,重置计数器并再次插入数据来解决此问题,但这不是一种非常优雅的方式。
答案 2 :(得分:0)
我不确定你为什么这样做,但它有一个有趣的气味。如果您尝试返回行号,我建议您使用row_number并按ID排序。 E.G。
SELECT ROW_NUMBER() OVER(ORDER BY ID) AS 'ID', *
FROM your_table
罗斯
答案 3 :(得分:-1)
编辑 - 使用此命令重新初始化标识列。
TRUNCATE TABLE [tablename]
对于您要做的事情,您不能/不应该使用标识列。