在我的MS Access表myTable
中,我有一个类{integer}的列ID
,它是表的主键。
我需要将每个ID的值增加一定的偏移量。所以,我试图运行
Update myTable
Set ID = ID + [Offset]
此命令适用于非常大的偏移,但如果偏移很小则以错误结束。原因似乎是Access正在随机或按升序执行这些更新,这意味着当尝试更新某些行中的值时,将违反主键约束。原因是在更新过程中,生成的ID在特定时间已经存在于表中,但如果查询正确完成,理论上将不再存在。
与MS Access不同,SQL Server有一个内置的机制来处理它,所以上面的语句可以工作。
显然,除了在更新之前删除密钥约束之外,解决方案是强制Access以降序更新字段,即从最高ID开始向下移动,从而避免重复的可能性。但是,以下命令在MS Access中无效。
Update myTable
Set ID = ID + [Offset]
Order By ID Desc
旁注:此命令适用于MySQL。
有没有办法在不删除键约束的情况下实现我想要做的事情?
答案 0 :(得分:3)
也许你可以通过两个更新来实现:
Update myTable Set ID = ID + [Offset] + [HighConstant];
Update myTable Set ID = ID - [HighConstant];