在 sql server 2005 中添加外键

Posted

技术标签:

【中文标题】在 sql server 2005 中添加外键【英文标题】:adding a foreign key in sql server 2005 【发布时间】:2013-09-24 13:23:48 【问题描述】:

我正在使用以下命令添加外键

ALTER TABLE Company
ADD FOREIGN KEY (enumber)
REFERENCES emp(enumber);

...但它给出了一个错误:

消息 1769,第 16 级,状态 1,第 2 行 外键“company_enumber_FK”在引用表“company”中引用了无效列“enumber”。 消息 1750,第 16 级,状态 0,第 2 行 无法创建约束。查看以前的错误。

现在,如果我在表 company 中创建列 enumber 并执行它,命令会运行但显示空值。

这里 enumber 是表 emp 的主键,company 是另一个表,我希望在其中添加外键 enumber

我该怎么办?

【问题讨论】:

“命令运行但显示为空” - 您是否希望系统以某种方式神奇地知道在添加列时填充到 enumber 中的正确值是什么? 据我所知外键值不应该为 null 。那为什么它显示为空? 但又一次 - 您希望系统如何知道它要填充的非 NULL 值是什么?你错了,外键引用为空也没关系。 当子表和父表的行数不同时,系统填充null。我正确吗? 我完全不确定你对外键的理解是什么——我不太明白你现在在问什么。 【参考方案1】:

通常的方法是将新列添加到 Company 表中 - 作为可空列或(如果所有行都应接收相同的值)具有默认值。

接下来,应用外键约束。

如果您在第一段中选择了可为空的列,那么您现在应该编写一个UPDATE 来确定@​​987654323@ 中每一行的正确值。

最后,您可以再次更改Company,将可空列更改为NOT NULL

【讨论】:

【参考方案2】:

这意味着Company 没有名为enumber 的字段。换句话说,就是这样:

ADD FOREIGN KEY (enumber)

Company 中引用了错误的字段。

【讨论】:

现在,如果我在表公司中创建一个列 enumber 并执行它,命令运行但显示空值。为什么会这样? @sugam,你是什么意思显示null?我真的没有跟着你。 @sugam,如果您说外键字段不能包含 null - 这是一个不正确的假设。外域键不能包含键控表中不存在的值。如果您想确保所有记录都有一个值 - 将该字段设置为不可为空。请记住,您需要先更新所有记录,因为它们需要一个值。 当子表和父表的行数不同时,系统将填充 null。我正确吗? ——

以上是关于在 sql server 2005 中添加外键的主要内容,如果未能解决你的问题,请参考以下文章

数据库开发基础-SQl Server 主键外键子查询(嵌套查询)

sql server 主键与外键约束无法创建

sql用命令创建主键与外键。

怎么在SQL中设置外键

请问SQL server 中的主键和外键的作用

在MySQL中如何设置主键和外键