2011-03-13 111 views
24

我想一個外鍵添加到表,並把它交給我下面的錯誤:添加外鍵,SQL SERVER 2008

There are no primary or candidate keys in the referenced table 'tbl_Person' that match the referencing column list in the foreign key 'P_ID'.

我有一個tbl_Person,其定義爲:

P_ID INT (Primary Key) 
f_Name, 
l_Name 

另一表是定義爲一個評論表:

C_ID INT, 
Comments, 
P_ID (should be the foreign key) 

試圖使一對多的關係表,因此,當用戶添加評論,它被引用回給他,同樣,他可以添加到評論中,而不用初始化新的評論。希望這有點道理。

例如:Randy Bing輸入「我愛SQL」,他的ID是1,f_Name是Randy,l_Name是Bing,他的評論是「我愛Sql」。他的評論應該存儲一個唯一的ID,以及導入他的P_ID。

後來,當Randy想要添加具有相同C_ID的註釋時,其中P_ID匹配他而不創建新的C_ID。

這裏是代碼:

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID 
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID) 

上午我差點被正確的軌道上?

+0

你在使用什麼SQL? – gbn 2011-03-13 17:34:47

+0

T-SQL(SQL SERVER 2008) – jpavlov 2011-03-13 17:37:51

+0

大括號格式代碼,你知道 – gbn 2011-03-13 17:42:43

回答

72

此錯誤通常意味着數據類型是「註釋」和「人」之間的不同,假設這是實際的消息

的SQL應該是這個

ALTER TABLE tbl_Comments WITH CHECK ADD 
CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID) 

這符合你添加的內容。所以:

  • 檢查數據類型是 INT
  • 確保P_ID是tbl_Person
  • (編輯,2011年12月)主鍵整理和長度必須爲VARCHAR列太
+0

謝謝你的工作,我也在第一次運行它時運行了錯誤,然後我記得我在設置主服務器後忘記保存表關鍵...謝謝。 – jpavlov 2011-03-13 17:41:09

+1

@jpavlov,如果@ gbn的答案解決了您的問題,您應該接受它作爲正確答案。 (點擊投票數下方的複選標記。) – 2011-03-13 17:49:05

4
相同

在對象資源管理器中,連接到數據庫引擎的實例。

在標準欄上,單擊新建查詢。

示例在列TempID上創建一個外鍵,並引用Sales.SalesReason表中的SalesReasonID列。

USE AdventureWorks2012; 
    GO 
    ALTER TABLE Sales.TempSalesReason 
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
    REFERENCES Sales.SalesReason (SalesReasonID) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
    ; 
    GO