【问题标题】:adding a foreign key in sql server 2005在 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。我正确吗?
  • 我完全不确定你对外键的理解是什么——我不太明白你现在在问什么。

标签: sql sql-server-2005 key


【解决方案1】:

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

接下来,应用外键约束。

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

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

【讨论】:

    【解决方案2】:

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

    ADD FOREIGN KEY (enumber)
    

    Company 中引用了错误的字段。

    【讨论】:

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