sql - 如何在不违反约束的情况下增加主键列中的现有值?

标签 sql ms-access

在我的 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/

相关文章:

forms - 如何有条件地停止 Access VBA代码?

java - WIldfly - 身份验证成功后的sql查询

mysql - MySQL 中的 HTML 串联

SQL按月、按用户、按位置计算居住天数

javascript - Sql 或 MySql 语句产生解析错误

java - 我有选择查询问题

php - 直接从Mysql查询数据生成报告(使用groupby、count)

vba - Ms Access - VBA - 以编程方式创建具有大小的标签

c# - 如何在 C# 中在运行时创建 Access 数据库?

ms-access - Access 中的复杂表单和脚本编写