gpt4 book ai didi

sql-server - IDENTITY 列重置编号

转载 作者:行者123 更新时间:2023-12-05 04:05:35 25 4
gpt4 key购买 nike

我有一个带有 IDENTITY 列的 SQL Server 表 (bigint)。

假设该表包含 100 条记录,那么 IDENTITY 列的值将从 1 到 100。

如果我删除中间的一些记录,假设删除了标识值为 3、7、18、20 的行。

我需要重新编号行,从 1 开始到 96,新记录从 97 继续。

如何实现?

最佳答案

Jacob H 在评论中所说的是完全正确的,IDENTITY 列不是为保存顺序值而设计的。如果您DELETE 一行,那么您将丢失一个数字。此外,如果 INSERT 失败、事务被回滚,或者(如果您使用的是旧版本的 SQL Server)服务器意外停止,那么您也会观察到同样的问题。 (在旧版本中,SQL Server 用于缓存一系列标识(1000)。如果服务器意外停止,则不会释放缓存,因此种子(在启动时)将是最大值旧缓存 +1。)

如果您需要获取序列号,则需要在 SELECT 语句中使用 ROW_NUMBER()。你需要这样的东西:

ROW_NUMBER() OVER (ORDER BY YourIDColumn) AS SequentialIdentity

编辑:如果您想以更永久的方式获取“行号”,那么您可以创建一个 VIEW,其中有一列包含您的顺序标识的值来自 ROW_NUMBER()。然后,不要在查询中引用表,而是引用 View 。

关于sql-server - IDENTITY 列重置编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com