我在將外鍵添加到外鍵可能爲空的現有表時遇到問題。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
顯示完整的alter語句以及兩個表的相關DDL ... –
這通常意味着您在EditedBy列中具有User.Id中沒有匹配值的值。在這裏小心點。當您將這種外鍵創建到用戶表時,您必須將外鍵值設置爲NULL,否則您將無法刪除用戶。 –
肖恩,這就是我到目前爲止在網上找到的。但是我剛剛在嘗試應用外鍵之前創建了EditedBy列,因此當前每個存在的記錄都有一個NULL值。至於刪除用戶,我從不刪除記錄。我有一個刪除標誌,以便用戶帳戶可以恢復,以便我可以避免您描述的問題。 –