2017-03-21 26 views
0

我正在整理一個數據庫,並嘗試對所有依賴項進行排序,並且在向表中添加一個外鍵時遇到錯誤。我檢查了約束條件,似乎無法發現,所以我只是想知道問題出在哪裏。不會讓我添加一個外鍵到SQL Server中的表中

「患者」表已成功保存「約會」表 - 無法創建關係「FK_Appointments_PATIENTS」。 ALTER TABLE語句與FOREIGN KEY約束 「FK_Appointments_PATIENTS」衝突。衝突發生在數據庫 「OEPD_PRO」,表「dbo.PATIENTS」,列「PatientNumber」中。

這是在我嘗試保存表格時保持標記的錯誤。 'PatientNumber'是'PATIENTS'表中的主鍵,我試圖將它作爲外鍵添加到'Appointments'表中。

ALTER TABLE Appointments 
ADD CONSTRAINT FK_PatientAppointments 
FOREIGN KEY (PatientNumber) REFERENCES PATIENTS(PatientNumber); 

我非常感謝給出的任何幫助/建議。

感謝, KB

+0

向我們展示您正在使用的SQL。當你的SQL發生錯誤時,告訴你什麼時候我們可以看到錯誤的SQL。 – Hogan

+1

聽起來就像你試圖添加一個名爲KEY的「FK_Appointments_Patience」,當一個名稱已經存在。 – xQbert

+0

這是標記''ALTER TABLE語句與FOREIGN KEY約束「FK_PatientAppointments」衝突的錯誤消息。衝突發生在數據庫「OEPD_PRO」,表「dbo.PATIENTS」,列「PatientNumber」中。 '' – Karl

回答

2

檢查Appointments無效PatientNumber小號

select * 
from Appointments a 
where not exists (
    select 1 
    from Patients p 
    where a.PatientNumber = p.PatientNumber 
) 

如果他們需要被刪除,你可以像這樣刪除:

delete a 
from Appointments a 
where not exists (
    select 1 
    from Patients p 
    where a.PatientNumber = p.PatientNumber 
) 

然後試着加入你的外國鍵。

+0

你好,這工作出色,謝謝! – Karl

+0

@Karl樂意幫忙! – SqlZim

+0

您可能需要暫時創建一個「未知」患者,並將這些約會分配給「未知」患者,以便在刪除它們之前對其進行研究。 –

0

這可能是因爲表中已經有數據不符合Foreign Kye值。假設我在Patients.PatientId中具有值1,2和3,並且字段Appointments.PatientId的值爲4,因此不符合約束規則。所以在添加約束之前,請確保表中沒有任何這樣的無效數據。

+0

嗨Jayasurya,這是原因 - 謝謝你 – Karl

+0

你永遠是受歡迎的 –