2013-09-24 96 views
0

我使用下面的命令來添加一個外鍵將在SQL Server中的外鍵2005

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

...但它給了一個錯誤:

Msg 1769, Level 16, State 1, Line 2
Foreign key 'company_enumber_FK' references invalid column 'enumber' in referencing table 'company'.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.

現在,如果我創建一個列enumber在表company並執行它的命令運行,但顯示空值。

這裏enumber是表empcompany的主鍵是我要外鍵enumber添加

我應該怎麼做另一個表?

+4

「該命令運行但顯示爲空」 - 您是否期待系統以某種方式神奇地知道添加列時添加到「enumber」中的正確值是什麼? –

+0

據我所知外鍵值不應該爲空。那爲什麼它顯示爲空? – sugam

+3

但是,你又如何期望系統知道它意味着什麼非NULL值呢?而且你不正確,外鍵參數爲空就沒問題。 –

回答

3

通常的做法是將新列添加到Company表中 - 作爲可爲空的列或(如果所有行都應接收相同的值)使用默認值。

接下來,應用外鍵約束。

如果在第一段中選擇了可空列,那麼現在應編寫一個UPDATE,它確定Company中每行的正確值。

最後,您可以再次更改Company,將可空列更改爲NOT NULL

0

這意味着Company沒有名爲enumber的字段。換言之,這是:

ADD FOREIGN KEY (enumber) 

引用了Company中的錯誤字段。

+0

現在,如果我在表公司中創建一列列並執行它,該命令運行但顯示空值。爲什麼這樣? – sugam

+0

@sugam,你是什麼意思*顯示null值*?我真的沒有在那裏跟蹤你。 –

+0

@sugam,如果你說外鍵字段不能包含'null' - 那是一個不正確的假設。外鍵字段鍵不能包含**在鍵控表中不存在的值**。如果您想確保所有記錄都有值 - 將該字段設置爲非空值。請記住,您需要首先**更新**所有記錄,因爲它們需要一個值。 –