在SQLServer2005中添加外键
我正在使用以下命令添加外键在SQLServer2005中添加外键,sql,sql-server-2005,key,Sql,Sql Server 2005,Key,我正在使用以下命令添加外键 ALTER TABLE Company ADD FOREIGN KEY (enumber) REFERENCES emp(enumber); 。。。但它给出了一个错误: Msg 1769,第16级,状态1,第2行 外键“company_enumber_FK”在引用表“company”中引用了无效列“enumber”。 Msg 1750,第16级,第0状态,第2行 无法创建约束。请参阅前面的错误 现在,如果我在表company中创建一列enumber,并执行它,命令将
ALTER TABLE Company
ADD FOREIGN KEY (enumber)
REFERENCES emp(enumber);
。。。但它给出了一个错误:
Msg 1769,第16级,状态1,第2行外键“company_enumber_FK”在引用表“company”中引用了无效列“enumber”。
Msg 1750,第16级,第0状态,第2行
无法创建约束。请参阅前面的错误
现在,如果我在表
company
中创建一列enumber
,并执行它,命令将运行,但显示空值
这里,enumber
是表emp
的主键,company
是另一个表,我想在其中添加外键enumber
我该怎么办?这意味着
公司
没有名为enumber
的字段。换句话说,这是:
ADD FOREIGN KEY (enumber)
在
公司
中引用了错误的字段,这意味着公司
没有名为枚举器
的字段。换句话说,这是:
ADD FOREIGN KEY (enumber)
在
公司
中引用了错误的字段,通常的方法是将新列添加到公司
表中-作为可空列或(如果所有行都应接收相同的值)使用默认值
接下来,应用外键约束
如果在第一段中选择了可为空的列,那么现在应该编写一个更新
,以确定公司
中每一行的正确值
最后,您可以再次更改
公司
,将可空列更改为非空
,通常的方法是将新列添加到公司
表中-作为可空列,或者(如果所有行都应接收相同的值)使用默认值
接下来,应用外键约束
如果在第一段中选择了可为空的列,那么现在应该编写一个更新
,以确定公司
中每一行的正确值
最后,您可以再次更改
公司
,将可空列更改为非空
“命令运行但显示空”-您是否希望系统以某种方式神奇地,知道添加列时填充到enumber
中的正确值是什么吗?据我所知,外键值不应为null。那么为什么它显示空值呢?但是再一次,您如何期望系统知道它要填充什么非空值呢?您是不正确的,外键引用为null是可以的。当子表和父表的行数与本例不同时,系统将填充null。我是正确的吗?我根本不确定您对外键的理解是什么-我无法理解您现在问的问题。“命令运行但显示null”-您是否希望系统以某种方式神奇地知道添加列时填充到enumber
中的正确值是什么?据我所知,外键值不应为null。那么为什么它显示空值呢?但是再一次,您如何期望系统知道它要填充什么非空值呢?你错了,外键引用可以为null。当子表和父表的行数与本例不同时,系统将填充null。我是否正确?我根本不确定您对外键的理解是什么-我无法理解您现在提出的问题。现在,如果我在表公司中创建一个列枚举器并执行该命令运行,但显示空值。为什么会这样?@sugam,你说的shownull
value是什么意思?我真的不明白你的意思。@sugam,如果你说外键字段不能包含null
,那是不正确的假设。外部字段键不能包含键控表中不存在的值。如果要确保所有记录都有一个值,请将该字段设置为不可为空。请记住,您需要首先更新所有记录,因为它们需要一个值。当子表和父表的行数与本例不同时,系统将填充null。我是否正确?–现在,如果我在表company中创建一个列枚举器并执行它,命令将运行,但显示空值。为什么会这样?@sugam,你说的shownull
value是什么意思?我真的不明白你的意思。@sugam,如果你说外键字段不能包含null
,那是不正确的假设。外部字段键不能包含键控表中不存在的值。如果要确保所有记录都有一个值,请将该字段设置为不可为空。请记住,您需要首先更新所有记录,因为它们需要一个值。当子表和父表的行数与本例不同时,系统将填充null。我是否正确?–