2017-06-22 64 views
-1

所以我已經有了3個在我的數據庫的相關表: enter image description here跨2個表引用2個主鍵的外鍵?

現在我需要創建BAD.K02和(K1.K02,SR.K02)之間的關係。什麼是最簡單的方法來做到這一點? 我發現THIS題目幾乎相同的問題,但我仍然無法使其工作。

任何人都可以幫助我或唯一的方法來做到這一點是添加第二個外鍵到壞表?

+0

「之間」尚不清楚。請編輯你的問題說清楚(例如,在一個列表中):哪些表有什麼列列表組成FK引用哪些列表在哪些表中? FK的子欄也必須在參考欄中顯示。被引用的列表必須聲明爲PK *或* UNIQUE NOT NULL。另外:當您嘗試自己定義FK時會發生什麼? PS請勿使用圖像,請使用[文本](https://meta.stackoverflow.com/q/285551/3404097)。 – philipxy

回答

0

這是創建兩個外鍵約束的代碼。您可以在這裏閱讀更多關於https://www.w3schools.com/sql/sql_foreignkey.asp

ALTER TABLE [dbo].[K1] WITH CHECK ADD CONSTRAINT [FK_BAD_K1] FOREIGN KEY([K02]) 
REFERENCES [dbo].[BAD] ([K02]) 
GO 

ALTER TABLE [dbo].[K1] CHECK CONSTRAINT [FK_BAD_K1] 
GO 

ALTER TABLE [dbo].[SR] WITH CHECK ADD CONSTRAINT [FK_BAD_SR] FOREIGN KEY([K02]) 
REFERENCES [dbo].[BAD] ([K02]) 
GO 

ALTER TABLE [dbo].[SR] CHECK CONSTRAINT [FK_BAD_SR] 
GO 
+0

這看起來非常有趣,但是當我嘗試執行此操作時,出現錯誤: '1776號消息,級別16,狀態0,行1 被引用表'dbo.BAD'中沒有主鍵或候選鍵匹配引用外鍵'FK_BAD_K1'中的列表。' '消息1750,級別16,狀態0,行1 無法創建約束。查看以前的錯誤.' 我正在使用SQL Server 2005,可能這很重要。 – dejfit

+0

你的代碼只有當我設置BAD.K02作爲一個PK,我不能這樣做... – dejfit

+0

@dejfit你發現你的錯誤信息和標籤googling? PS爲什麼你不能將BAD K02設置爲PK/UNIQUE?如果被引用的列不是PK/UNIQUE,爲什麼你認爲你有FK? – philipxy