Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLServer2005中添加外键_Sql_Sql Server 2005_Key - Fatal编程技术网

在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,你说的show
null
value是什么意思?我真的不明白你的意思。@sugam,如果你说外键字段不能包含
null
,那是不正确的假设。外部字段键不能包含键控表中不存在的值。如果要确保所有记录都有一个值,请将该字段设置为不可为空。请记住,您需要首先更新所有记录,因为它们需要一个值。当子表和父表的行数与本例不同时,系统将填充null。我是否正确?–现在,如果我在表company中创建一个列枚举器并执行它,命令将运行,但显示空值。为什么会这样?@sugam,你说的show
null
value是什么意思?我真的不明白你的意思。@sugam,如果你说外键字段不能包含
null
,那是不正确的假设。外部字段键不能包含键控表中不存在的值。如果要确保所有记录都有一个值,请将该字段设置为不可为空。请记住,您需要首先更新所有记录,因为它们需要一个值。当子表和父表的行数与本例不同时,系统将填充null。我是否正确?–