由于密钥冲突,更新查询将不起作用

时间:2014-02-06 16:08:12

标签: sql-update ms-access-2010

我正在尝试更新2010 Access数据库“声明”表中的特定字段。我一直收到一条错误消息,指出存在严重违规行为。这是SQL:

更新声明SET Claims.LS_Name =“JPN” WHERE(((Claims.Responsibility2)= 0));

根据上面的代码,是否有任何理由说它不起作用?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我的第一个猜测是 Claims.LS_Name 上有一个唯一键,您的更新会触及多行。

答案 1 :(得分:0)

好的,我在Microsoft Access中也遇到了这个问题,并且认为我有办法解决此问题的版本。中间表可能不是必需的。我的经验是,自动编号是个问题,因此似乎可以转换为数字,但是您必须删除Access的关系才能进行此更改。

  1. 删除所有与目标表的关系。
  2. 从自动编号更改为数字。
  3. 制作一个新的空表,该表从下一个更高的键https://superuser.com/questions/288087/how-do-i-set-the-first-value-of-autonumber-in-access开始
  4. 更新/查询到递增表而不是目的地的表。
  5. 从递增的表更新/合并到目标表,包括新的更高键。
  6. 重新建立关系

或在某些情况下。 (对于我来说,新密钥与旧密钥匹配) 这样的东西(可能不是确切的步骤)

  1. 删除所有与目标表的关系。
  2. 删除目标中的ID /主键
  3. 合并/更新到目的地
  4. 在目标位置创建新的ID /主密钥(以便可以自动编号以重新编号密钥)
  5. 重新建立关系

无论如何,我的下一个研究项目是看看如何永远不要使用自动增量,并使用其他方法来做唯一键,这样就不必从自动增量更改为数字的过程中删除关系。