在我的 MS Access 表 myTable
中,我有一列 ID
,其类型为整数,并且是表的主键。
我遇到的情况是,我需要将每个 ID 的值增加一定的偏移量。所以,我尝试运行
Update myTable
Set ID = ID + [Offset]
此命令适用于非常大的偏移量,但如果偏移量很小,则会出现错误。原因似乎是 Access 随机或按升序执行这些更新,这意味着当尝试更新某些行中的值时,将违反主键约束。原因是在更新过程中,生成的 ID 在特定时间已存在于表中,但理论上如果查询正确完成,这些 ID 将不再存在。
与 MS Access 不同,SQL Server 有一个内置机制来处理这个问题,因此上面的语句可以工作。
显然,除了在更新之前删除键约束之外,解决方案还包括强制 Access 按降序更新字段,即从最高 ID 开始向下移动,从而避免重复的可能性。但是,以下命令在 MS Access 中无效。
Update myTable
Set ID = ID + [Offset]
Order By ID Desc
旁注:此命令将在 MySQL 中运行。
有没有办法在不消除关键约束的情况下实现我想要做的事情?
最佳答案
也许你可以通过两次更新来做到这一点:
Update myTable Set ID = ID + [Offset] + [HighConstant];
Update myTable Set ID = ID - [HighConstant];
关于sql - 如何在不违反约束的情况下增加主键列中的现有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628530/