当前位置: 首页 > 知识库问答 >
问题:

IDENTITY列重置编号

白赞
2023-03-14

我有一个SQL Server表,它有一个标识列(bigint)。

假设该表包含100条记录,那么IDENTITY列的值为1-100。

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

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

如何实现这一点?


共有2个答案

华献
2023-03-14

正如@Jacob在评论中所说的,钥匙是不会被改变的。一旦一行获得一个键(标识),它应该保持不变,直到删除该行。相反,我建议您添加一个新列,用于存储数字。

但请注意,需要维护新列,因为每次删除一行时,数字序列中都会出现一个间隙。这需要多长时间执行一次取决于,可能是通过计划的作业每晚执行一次,或者立即使用数据库触发器。

您还可以通过仅在从数据库获取数据时创建行编号列来跳过整个问题。查询可能如下所示:

SELECT RANK() OVER (ORDER BY KeyColumn) AS test, * FROM MyOwnTable ORDER BY test
王兴腾
2023-03-14

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

如果需要获取序列号,则需要在SELECT语句中使用ROW\u number()。您需要以下内容:

ROW_NUMBER() OVER (ORDER BY YourIDColumn) AS SequentialIdentity

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

 类似资料:
  • 问题内容: 我有一个带有IDENTITY列的表 在添加/删除了beeing的某些行之后,我以Id值的间隔结尾: 有没有一种简单的方法可以将值压缩为 ? 问题答案: 我认为用相同的模式创建第二张表,从第一张表导入所有数据(当然,除了identity列;让第二张表开始重新编号),然后删除第一张表并将第二张表重命名为原始名称。 如果您有大量的FK关系要与其他表等一起重建,是否容易成为问题。

  • 我有一个表,它有一个主键ID列,并设置为每个新条目的增量为1,这是一个相当标准的配置。此表定期更新新记录,每月归档一次到存档表,然后截断。 我的问题不是关于重新播种列(使用DBCC--我知道如何这样做),而是关于如何使用新的ID值重新对现有记录进行编号。我应该使用循环的动态SQL查询(删除记录、插入记录)来执行此操作吗?还是有一些我不知道的SQL Server函数可以自动重新编号ID列?

  • 问题内容: 我有一个VB6 / Access应用程序,偶尔会遇到错误的自动编号字段种子问题。 可以说有一个具有自动编号字段ID(也是主键)的表MYTABLE。可以说,当前ID的最大值为1000。当应用程序插入新记录(未明确提供ID值)时,由于某种原因,它决定下一个自动编号字段值为950(而不是应为1001)。 )-因此发生主键冲突错误。 我找到了一篇描述我的症状的知识库文章:http : //su

  • 1.接口描述 该接口在身份核验的基础上,结合用户的活体检测动作,基于模型算法的能力,优先进行图片质量检测,判断用户图片是否清晰,是否过度曝光等;再对照片进行人像定位,特征提取,并进行防hack验证;并最终判断是否为用户本人。   注1:此接口只提供比对相似度分数,不提供比对照片; 注2:此接口只能配合Android活体检测SDK或者iOS活体检测SDK使用; 注3:protobuf文件中包含加密的

  • 1.接口描述 该 API 的功能是将手持身份证照中的被拍人的脸和手持身份证上的人脸进行比对,判断是否为同一人。 图片要求 格式为 JPG(JPEG),BMP,PNG,GIF,TIFF 宽和高大于 8px,小于等于4000px 小于等于 5 MB 上传图片规范 头像与身份证无重叠 本人头像清晰 身份证信息清晰 无第三张人脸 支持自动识别人脸方向 上传的图片中包含有 exif 方向信息,先按此信息旋转

  • 1.接口描述 该API的功能是将自拍照脸部关键部位进行打码(目前仅支持对眼部打码) 图片要求 格式为 JPG(JPEG),BMP,PNG,GIF,TIFF 宽和高大于 8px,小于等于4000px 小于等于 5 MB 请求方式: POST 请求URL: https://cloudapi.linkface.cn/identity/mask_selfie_image 2.请求参数 字段 类型 必需