gpt4 book ai didi

sql-server - 删除 FK 行时可以更改外键 ID 吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:00 24 4
gpt4 key购买 nike

我需要在我们的一个数据库表中创建一个唯一的列,并且我们想要从表中完全删除所有重复项。然而,存在一个障碍,因为对其他表的依赖性会受到影响。

例如,假设我们有以下关系:

-------------------   -------------------
* Customer * * Order *
------------------- -------------------
* ID * * ID *
* Name * * CustomerID *
* Address * * Item *
------------------- -------------------

那里的关系相当明显——一个订单需要一个 CustomerID,这是一个外键。所以我们不能删除客户并保留顺序数据。

在示例中,我完全同意丢失多余的客户数据,但为了以后引用,我想将 CustomerID 从订单更改为“已删除客户”行的客户 ID。

有什么方法可以说“删除它,如果有外键约束,则将 CustomerID 更改为该 ID”?数据库是 MS SQL 2005。

最佳答案

我会说:

第 1 步:创建要删除的重复 ID 以及要保留的相应 ID 的列表。该方法实际上取决于您如何检测重复项。假设你有一张 table :

-------------
* Dupes *
-------------
* del_id *
* keep_id *
-------------

第 2 步:重新链接订单

update order o
set CustomerID=(select keep_id from Dupes d where d.del_id=o.CustomerID)
where CustomerID in (select del_id from Dupes)

第三步:删除老客户

delete from Customer
where ID in (select del_id from Dupes)

瞧瞧。

关于sql-server - 删除 FK 行时可以更改外键 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1037274/

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