2

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

结果,当我更新对新表的引用时,引用不再正确。我应该如何更新引用以使其保持正确?

编辑 - 道歉 - 更多细节:

目前我有这个:

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

我想删除表“Hotels”,但需要确保在将记录复制到表“Suppliers”后来自另一个表“HotelContract”的引用仍然正确

编辑 2 - 这是 SQL Server 2005。

我有一个表“HotelContract”,其中包含外键“HotelId”。我已将此更新为“SupplierId”,以便在将酒店复制到“Supplier”表时使用。

4

1 回答 1

2

如果您在酒店和供应商中有另一个唯一键(例如名称),您可以使用此键更新 HotelContract 中的 SupplierId(首先将外键约束放到酒店)。您可以通过 HotelContracts、Hotels 和 Suppliers 之间的连接来做到这一点:

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

如果您没有这样的唯一键,则必须将来自 Hotels 的原始 HotelId(现为 SupplierId)存储在 Supplier 的临时列中。在这种情况下,HotelContract 的更新很简单。

之后恢复HotelContract的外键。

于 2013-03-11T13:30:45.460 回答