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

前端之家收集整理的这篇文章主要介绍了sql-server – 重置SQL Server中的标识列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个存储联系人的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“缺失”,软件应该测试这些值的存在而不是仅仅是摆动.

猜你在找的MsSQL相关文章