将记录复制到其他表时更新外键

时间:2013-03-11 11:02:14

标签: sql-server sql-server-2005

我有两个表要合并在一起。它们都有相同的列。但是,我要复制的记录由另一个表引用。

因此,当我更新对新表的引用时,引用不再正确。我该如何更新参考文献以使它们保持正确?

编辑 - 道歉 - 更多细节:

目前我有这个:

INSERT INTO Suppliers
                      (Name, Reference, Telephone, Email, ContactName, AddressId, CommentSetId)
SELECT     Name, Reference, Telephone, Email, ContactName, AddressId, CommentSetId
FROM         Hotels

我想删除“酒店”表,但需要确保将记录复制到“供应商”表后,另一个表“HotelContract”的引用仍然正确

编辑2 - 这是SQL Server 2005。

我有一张“HotelContract”表,其中有外键“HotelId”。我已将此更新为“SupplierId”,以便在将酒店复制到“供应商”表格时使用。

1 个答案:

答案 0 :(得分:2)

如果您在酒店和供应商(例如姓名)中有另一个唯一密钥,您可以使用此密钥更新HotelContract中的SupplierId(首先将外键约束删除到酒店)。您可以通过HotelContracts,酒店和供应商之间的联接来实现这一目标:

update HotelContract
   set SupplierId = S.SupplierId
  from HotelContract C
 inner join
       Hotels H
          on H.HotelId = C.SupplierId -- assuming the pk column in Hotels is HotelId
 inner join
       Suppliers S
          on S.Name = H.Name -- assuming Name is unique in both tables

如果您没有这样一个唯一的密钥,您必须在供应商的临时栏中存储原始的HotelId(现在是SupplierId)。在这种情况下,HotelContract的更新很简单。

之后恢复HotelContract的外键。