gpt4 book ai didi

sql-server-2008 - 如果主键也是另一个表的外键,如何更新它?

转载 作者:行者123 更新时间:2023-12-04 18:20:08 24 4
gpt4 key购买 nike

我有一个表 tableA,其中有一列 myID。 myID 是 tableA 中的主键和 tableB 中的外键。

当我尝试更新 tableA 中特定记录的 myID 时:

update tableA
set myID = 123456
where myID= 999999

我收到这个错误:

The UPDATE statement conflicted with the FOREIGN KEY constraint "tableA_FK00". The conflict occurred in database "mydatabase" , table "tableA" , column 'myID'.



我已将 myID 的更新规则设置为“级联”并将外键约束设置为“否”,但我仍然无法更新。我应该如何进行?

最佳答案

如果 tableB 中有一条记录使用 PK 123456 引用 tableA,并且 tableB 是具有“tableA_FK00”约束的表,那么您违反了约束。如果您必须更改 tableA 中一行的 PK(我不确定您为什么要这样做,PK 永远不应该更改!!!)您有责任确保没有其他记录使用 FK 约束引用它。

所以如果你坚持改变tableA中的PK:

  • 查找哪个表具有约束“tableA_FK00”(确保它只是 tableB see post here )。
  • 临时删除 tableB 中的约束
  • 更新表A
  • 更新 TableB 中所有需要更改 FK 的行
  • 在 tableB 上重新应用 FK 约束

  • 另外一个选项:
  • 使用 FK 123456 将 tableB 中所有行的 id 插入到临时表中(该表只有 tableB 中的 PK 键)
  • 设置 tableB FK 字段以允许空值
  • 通过与 tableB PK 上的临时表连接来设置 tableB FK = null 中的所有字段
  • 更改 tableA 中的行
  • 通过连接临时表将 tableB 中的所有行设置为 999999。
  • 关于sql-server-2008 - 如果主键也是另一个表的外键,如何更新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059442/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com