无法将外键连接到主键

时间:2016-06-20 18:43:42

标签: foreign-keys primary-key

我是SQL Server的新手,并且很难将一个表中的外键链接到另一个表中的主键。这就是我所拥有的:

这是我的第一张表

Create table "Employees"
(EmpID Int identity(1,1) primary key,
EmpNo Int,
EmpFName Varchar(30),
EmpLName Varchar(30),
JobID int references JobDetails(JobID)
)

然后我创建了第二个表:

Create table "Projects"
(ProjectID Int identity(1,1) primary key,
ProjectName VarChar(30),
ProjStartDate smalldatetime,
)

并试图链接第三个表:

Create table "HrsWkd"
(HrsID Int identity(1,1) primary key,
ProjectID int references Projects(ProjectID),
HoursWorked int,
EmpID int references Employees(EmpID)
)

顺便说一句,(EmpID)下面有一条红色的波浪形线,表示它引用了员工的无效栏目'。

如果我然后尝试将数据输入到第三个表中,如下所示:

insert into HrsWkd values 
    (1,1,50),
    (1,2,75),
    (2,3,85)

我收到此消息:

  

Msg 547,Level 16,State 0,Line 12

     

INSERT语句与FOREIGN KEY约束冲突" FK__HrsWkd__EmpID__68487DD7"。      冲突发生在数据库" New_AP",table" dbo.Employees",column' EmpID'。

     

声明已经终止。

在过去的2个小时里,我一直在用头发拉我的头发。我猜这很简单,但我无法看到它。

谢谢!

twotoast

2 个答案:

答案 0 :(得分:0)

我很长时间没有专门使用SQL Server,但是您尝试使用NULL Employee插入记录。

在创建HrsWkd表期间,您应该允许NULL值。我不是100%肯定语法。在创建表格时会出现类似的情况。

CREATE TABLE "HrsWkd" (
  HrsID INT IDENTITY(1,1) PRIMARY KEY,
  ProjectID INT FOREIGN KEY REFERENCES Projects(ProjectID),
  HoursWorked INT,
  EmpID INT NULL FOREIGN KEY REFERENCES Employees(EmpID)
)

否则您违反了默认的FK约束。

答案 1 :(得分:0)

所以,我发现了问题所在。我很尴尬地提到它,因为它是如此明显 - 但它可能在将来帮助其他人。

主要和外国之间的联系很好 - 问题是输入数据。

  1. 我没有在' Projects'中添加所有数据。然后,我试图引用' HrsWkd',其次;
  2. 我没有将数据输入' HrsWkd'与列设置的顺序相同 - 所以我试图添加无效数据。我一直玩桌子,尝试不同的订单/结果,当我试图添加时,我的数据不再匹配。
  3. 哦,这是我(希望)永远不会再做的事 - 这是一个很好的学习机会' !!!!