2016-06-10 63 views
0

我在將外鍵添加到外鍵可能爲空的現有表時遇到問題。MSSQL外鍵關係和空值

說我有一個用戶表和一個數據表。數據表在「用戶表ID列」的「createdBy」列上已經有一個可用的外鍵。我剛剛在數據表「EditedBy」中添加了第二列,允許空值(表示數據記錄尚未編輯)。因此,所有現有記錄都具有NULL作爲此列的值。

我想在Data.EditedBy和User.Id之間創建一個外鍵,但是當我嘗試應用它時,出現以下錯誤。

ALTER TABLE語句與FOREIGN KEY約束「FK_Data_User_EditedBy」衝突。衝突發生在數據庫「測試」,表「dbo.User」,列'Id'。

它看起來像它有一個數據表中的NULL值的問題,但NULL是一個外鍵可接受的值。

我缺少什麼?

UPDATE: 的發言全文如下

USE [Test] 
GO 

ALTER TABLE [dbo].[Data] WITH CHECK ADD CONSTRAINT [FK_Data_User_EditedBy] FOREIGN KEY([Id]) 
REFERENCES [dbo].[User] ([Id]) 
GO 
+1

顯示完整的alter語句以及兩個表的相關DDL ... –

+1

這通常意味着您在EditedBy列中具有User.Id中沒有匹配值的值。在這裏小心點。當您將這種外鍵創建到用戶表時,您必須將外鍵值設置爲NULL,否則您將無法刪除用戶。 –

+0

肖恩,這就是我到目前爲止在網上找到的。但是我剛剛在嘗試應用外鍵之前創建了EditedBy列,因此當前每個存在的記錄都有一個NULL值。至於刪除用戶,我從不刪除記錄。我有一個刪除標誌,以便用戶帳戶可以恢復,以便我可以避免您描述的問題。 –

回答

0

好吧,我覺得自己像個白癡。我使用Management Studio來創建關係,並且在我發佈了等效的alter語句之後(我也沒有發現這個語句),我意識到我試圖在[data]的ID字段和ID字段之間建立一個外鍵[用戶]。

很明顯,這將無法正常工作。

我修正了聲明在[data]表中使用了正確的字段,一切都很好。

+0

你可以接受你自己的答案,向別人展示你的問題有一個滿意的答案。 – philipxy