添加外键,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)
上午我差点被正确的轨道上?
此错误通常意味着数据类型是“注释”和“人”之间的不同,假设这是实际的消息
的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列太
谢谢你的工作,我也在第一次运行它时运行了错误,然后我记得我在设置主服务器后忘记保存表关键...谢谢。 – jpavlov 2011-03-13 17:41:09
@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
你在使用什么SQL? – gbn 2011-03-13 17:34:47
T-SQL(SQL SERVER 2008) – jpavlov 2011-03-13 17:37:51
大括号格式代码,你知道 – gbn 2011-03-13 17:42:43