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“缺失”,软件应该测试这些值的存在而不是仅仅是摆动. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLSERVER2005的混和身份验证模式的设置以及SA登陆问题
- SQL,关键字“FROM”附近的CASE语句的语法不正确
- SQL Server中删除重复数据的几个方法
- sqlserver的insert select 和update select
- sqlserver2008各种连接字符串和用IP访问sqlserver2008
- sql-server-2008 – 将数据库从SQL Server 2000复制到SQL S
- Mysql更改默认引擎为Innodb的步骤方法
- sqlserver2005 递归查询
- sql – foo.foo:提供一个与表本身同名的表列是个坏主意吗?
- sql – 当索引扫描是更好的选择时Postgres不使用索引