在 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 中添加外键的主要内容,如果未能解决你的问题,请参考以下文章