添加外键,SQL SERVER 2008

问题描述:

我想一个外键添加到表,并把它交给我下面的错误:添加外键,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

此错误通常意味着数据类型是“注释”和“人”之间的不同,假设这是实际的消息

的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

相同

在对象资源管理器中,连接到数据库引擎的实例。

在标准栏上,单击新建查询。

示例在列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