2013-03-11 109 views
2

我有兩個我想要合併在一起的表。他們都有相同的列。但是,我想要複製的記錄由另一個表引用。將記錄複製到不同的表時更新外鍵

因此,當我更新對新表的引用時,引用不再正確。我應該如何更新參考文獻以保持正確?

編輯 - 道歉 - 更詳細一點:

目前,我有這樣的:

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

我想刪除表「酒店」,但需要確保從另一個表參考「HotelContract」仍然是複製記錄表「供應商」

EDIT 2後,正確的 - 這是SQL Server 2005中

我有一個表「HotelCont ract「有外鍵」HotelId「。我已將此更新爲「供應商ID」,供酒店複製到「供應商」表格時使用。

+0

你可以添加表結構,包括外鍵的問題?此外,這是什麼版本的SQL Server? – 2013-03-11 11:14:30

+0

@Mikeal全部完成! – 2013-03-11 11:22:06

+0

「供應商」中的主鍵是「身份」列嗎? – 2013-03-11 11:49:58

回答

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(現在的供應商ID)這樣一個獨特的密鑰。 HotelContract的更新在這種情況下很簡單。

事後恢復HotelContract的外鍵。

+0

感謝您的幫助。我一整天都在堅持,並嘗試了幾種不同的方法來解決它。然而,我似乎收到了很多「無效的列名」錯誤,我不確定這是不是一個無關的問題? – 2013-03-11 13:52:33

+0

例如,如果我運行此代碼:從dbo.HotelContractsÇ'code'update dbo.HotelContracts 組供應商ID = S.SupplierId 內加入 dbo.Hotelsħ 上H.Id = C.SupplierId - 假設酒店中的pk列是酒店Id 內部加入 dbo.Ssuppliers S 上S.Name = H.Name - 假設名稱在兩個表代碼中都是唯一的 它返回:無效的列名'SupplierId'。 – 2013-03-11 13:54:54

+0

代碼中有兩列「SupplierId」;一個在dbo.HotelContracts和一個在dbo.Suppliers中。請檢查兩個表是否有這個名稱的列?是否有更多列錯過?如果是,請通過編輯上面的問題來提供創建表格腳本。 – Claude 2013-03-11 15:34:48

相關問題