外键未填充主键值

时间:2012-01-28 16:33:53

标签: sql sql-server-2008 foreign-keys

我已经找到了答案,但我找不到答案。我有2张桌子。两者都有自动生成的PK。表2中的PK是表1中的FK。由于它们都是自动生成的,我假设表1中的FK将填充从表2自动生成的值,但它不起作用。表1中的FK最终为null。这是我创建表1的SQL代码:

CREATE TABLE Employee_tbl (
EmployeeID int PRIMARY KEY IDENTITY,
LastName varchar(20) not null,
FirstName varchar(20) not null,
Age varchar(3) not null,
JobID int FOREIGN KEY REFERENCES JobTitle_tbl(JobID),
)

,这是表2:

create table JobTitle_tbl(
JobID int PRIMARY KEY IDENTITY,
EEO1Classification varchar(50) not null,
Exempt_nonexempt_status varchar(20) not null,
)

我也有一些插入语句:

INSERT INTO Employee_tbl
    (LastName, FirstName, Age)
Values
    ('Smith', 'John', '50'),
    ...

INSERT into JobTitle_tbl (EEO1Classification, Job_title, )
VALUES ('Office/Clerical', 'Accounting Clerk', ),

为什么在查询表1时FK值显示为空?

1 个答案:

答案 0 :(得分:2)

外键不会自动填充,因为它不知道使用什么外键。您需要将行插入JobTitle_tbl表,然后选择退出ID(如果使用sql server则使用@@ identity)

select id from JobTitle_tbl where Job_title = ''

另一种选择是更新insert语句以包含主键,尽管您必须先允许标识插入。

SET IDENTITY_INSERT JobTitle_tbl ON
into the JobTitle_tbl (id, title) values (1, 'Manager')
SET IDENTITY_INSERT JobTitle_tbl OFF

在任何一种情况下,您都需要使用您拥有的ID更新您的第一个插入语句。

insert into Employee_tbl (LastName, FirstName, JobID) values ('Smith', 'John', 1)