2

一緒にマージしたい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-これはSQLServer2005です。

外部キー「HotelId」を持つテーブル「HotelContract」があります。これを「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

このような一意のキーがない場合は、ホテルの元のHotelId(現在はSupplierId)をSupplierの一時列に保存する必要があります。この場合、HotelContractの更新は簡単です。

その後、HotelContractの外部キーを復元します。

于 2013-03-11T13:30:45.460 に答える