如何在删除第一行后清除标识列以启动值

时间:2011-10-24 16:33:37

标签: sql sql-server

我有点问题。

我有50行标识列id-自动增量。所以,第一行有id 1,最后一行有id 50.然后,我删除1到25之间的行,现在我有id为26-50的行。

问题:

我怎么能“重新启动”这些行(26-50)到(1-25)?我不需要表中的空id。 THX。

SQL Server 2008

4 个答案:

答案 0 :(得分:4)

DBCC CHECKIDENT('your_table', RESEED, 0)

下一个值将是你用+ 1重新设置的值,所以在这种情况下我将它设置为0,以便下一个值为1.

有关http://msdn.microsoft.com/en-us/library/ms176057.aspx

的更多详情

答案 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]

对于您要做的事情,您不能/不应该使用标识列。