我有以下场景。假设我有3张桌子:
ID是整数和具有标识(1,1)的主键。
Clients
(ID(pk),名称)Orders
(ID(pk),客户端ID(fk),日期)OrderDetails
(ID(pk),订单ID(fk),产品,数量,价格)
假设我无意中删除了这3个表中的所有记录,但我有一个DB备份。问题是如何将那些已备份数据库中删除的记录重新插入到当前数据库中?
我知道我可以简单地使用"set identity_insert on"
和"insert into"
,但作为一个web应用程序,它必须保持活跃,并且有来自用户的插入。
如果我把所有的Clients
都插回,它们的ID就会不同,Orders(ClientID)
就不能再引用它了。Orders/OrderDetails
表也是如此。
我需要一些方法来用新的密钥ID更新外键ID。我该怎么做?
某种临时表来记录旧ID和新ID?
希望我能把我的问题说清楚:)
如果是我,我会:
- 确定备份中哪些行不在活动数据库中
- 将备份中的行插入到活动数据库中,其值为-1*标识值。例如,如果该行在备份中的标识值为1234,则将其插入到标识值为-1234的活动数据库中。这不仅适用于标识值,也适用于引用这些值的任何行(即外键)