【发布时间】:2016-05-16 13:30:41
【问题描述】:
我在 SQL Server 数据库中有以下表:A、B 和 C
- A有一个主键
ID - B 有一个包含
ID和A_ID的主键。A_ID也是A.ID的外键。 - C 有一个主键
ID和一个包含A_ID和B_ID的外键
我想将 B 和 C 的 A_ID 更新为不同的记录,例如
UPDATE B SET A_ID = 2 WHERE ID = 1
UPDATE C SET A_ID = 2 WHERE B_ID = 1
很遗憾,由于参照完整性,我无法更新 B.A_ID。如果可以的话,C 会有一个无效的外键。
我想这样做的一种方法是删除 C 中的外键约束并在查询运行后重新创建它。有没有办法在不改变表结构的情况下做到这一点?
【问题讨论】:
-
您的数据模型意味着来自
A的多重继承。您能否重构您的表格设计,以便C不引用A考虑是否已经引用B? -
不,我无法更改表格设计。
-
你能解释一下 C 上的 FK 吗?如果没有将 A_ID 和 B_ID 都作为主键的表,它如何“包含”这两者?
-
好点。哎呀……我的错。 B 有主键 ID 和 A_ID 我会更新我的问题。
-
我刚刚遇到了类似的问题。您能否结合插入和选择来创建实际上重复的数据,这样您就不会遇到完整性问题,更新子表,然后删除您不需要的原始数据?
标签: sql sql-server database