首页 > 解决方案 > SQL Server 删除 ID 列上的值

问题描述

在我的数据库中有一个列ID设置为“自动增量”

因此,当我删除一行时,ID = 2例如插入新行 ID 的值为 3。

问题是如何在删除操作中将 ID 返回 2 而不是 3?

我正在使用 Microsoft SQL Server 2012。

标签: sqlsql-serversql-deleteauto-incrementwindow-functions

解决方案


与其他数据库中的大多数其他自动增量实现一样,SQL Server 的标识列不提供任何选项来“填补”在数字被浪费时留下的空白(这不仅可能发生在删除行时,也可能发生在事务滚动时返回或服务器重新启动时)。

这在文档中有明确规定:

列上的标识属性不保证以下内容:

[...]

值的重用- 对于具有特定种子/增量的给定身份属性,引擎不会重用身份值。

如果出于显示目的,您希望在删除行时重置一个不断增加的值,您可以row_number()select查询中使用:

select t.*, row_number() over(order by id) new_id
from mytable t

如果您打算在常规基础上使用它,您可以创建一个视图,然后您可以查询而不是原始表:

create view myview as
select t.*, row_number() over(order by id) new_id
from mytable t;

select * from myview;

推荐阅读