加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 重置SQL Server中的标识列

发布时间:2020-12-12 07:29:16 所属栏目:MsSql教程 来源:网络整理
导读:我正在创建一个存储联系人的SQL数据库.我希望能够删除联系人,并且每个联系人的正确ID对于我连接到它的软件至关重要.让我们说我有联系詹姆斯,他是第一个.他的身份证是0.我加上玛丽,她的身份证是1.如果我删除詹姆斯,玛丽的身份证如何设置为0而不是1?它必须重置
我正在创建一个存储联系人的SQL数据库.我希望能够删除联系人,并且每个联系人的正确ID对于我连接到它的软件至关重要.让我们说我有联系詹姆斯,他是第一个.他的身份证是0.我加上玛丽,她的身份证是1.如果我删除詹姆斯,玛丽的身份证如何设置为0而不是1?它必须重置,因为她现在是第一个.换句话说,当有人被删除时,如何重置数据库中的所有ID?谢谢

解决方法

在自动递增的主键列上执行此操作是没有意义的,因为即使这样做很简单,在相关表中没有大量更新也会影响数据完整性.为此,您可能需要从列中删除索引和主键约束(此时应用程序可能会剥落),重新编号所有后续记录,重新编号所有相关表,然后重新应用主键约束和索引.

如果你真的必须有某种形式的线性标识符,它始终从0开始(这可能表明软件设计有问题)那么除了主键之外你还可以有一个辅助ID列,然后你可以更新以更高值用一句话来表达如下:

UPDATE table
SET secondaryID = secondaryID - 1
WHERE secondaryID > (SELECT secondaryID FROM table WHERE primaryID = [id to delete]);

DELETE FROM table
WHERE primaryID = [id to delete];

我强烈反对这种做法 – 如果由于删除了记录而导致您的ID“缺失”,软件应该测试这些值的存在而不是仅仅是摆动.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读