【问题标题】:Foreign Key Not Populating with Primary Key Values外键未填充主键值
【发布时间】:2012-01-28 16:33:53
【问题描述】:

我已经搜索了答案,但没有找到。我有 2 张桌子。两者都有一个自动生成的PK。表 2 中的 PK 是表 1 中的 FK。由于它们都是自动生成的,我假设表 1 中的 FK 将填充从表 2 自动生成的值,但它不起作用。表 1 中的 FK 最终为空。这是我创建表 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值显示为null?

【问题讨论】:

  • 您能否减少问题中的措辞? FK 也不是自动生成的。您必须将其显式插入子表中

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


【解决方案1】:

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

select id from JobTitle_tbl where Job_title = ''

另一种选择是更新您的插入语句以包含主键,尽管您必须首先允许身份插入。

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)

【讨论】:

  • 我理解对了吗?没有办法让 fk 自动填充?
  • @JohnStewart:不,FK 不能永远自动被填充 - 该行如何“知道”它属于哪个父行!?!??这是程序员所知道的您 - 由您将正确的值填充到 FK 中以建立到父行的链接。
  • @Shawn:我建议使用SCOPE_IDENTITY() instead of @@IDENTITY
  • 好点 Marc_s。我通常都不使用,但想为 John 提供选项。
猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多