2012-01-18 64 views
0

我有一個數據庫,爲了簡單起見,我們可以說它有兩個表。一個是Employee,另一個是EmployeeType。在數據庫圖表我試圖建立兩個表的關係,但它給了我以下錯誤....SQL關係錯誤

'EmployeeType (HumanResources)' table saved successfully 
'Employee (HumanResources)' table 
- Unable to create relationship 'FK_Employee_EmployeeType'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Employee_EmployeeType". The conflict occurred in database "TheDB", table "HumanResources.EmployeeType", column 'iID'. 

我不知道它是什麼問題。請幫忙...

+5

聽起來好像你已經定義了FK。 – 2012-01-18 14:28:18

+1

你有沒有讀錯誤?這似乎很清楚。 – Oded 2012-01-18 14:29:05

+1

這看起來像來自SSMS生成的查詢的錯誤。 – Yuck 2012-01-18 14:35:16

回答

4

哎喲,這麼多downvotes。至少他打擾發佈錯誤消息。正如丹尼爾A.懷特上面所說的,你可能已經有了你想要創造的外鍵。你的標籤說你正在使用SQL Server 2008,所以我會假設你是Microsoft SQL Server Management Studio。如果是這種情況,我曾經犯過一個錯誤(有時候還是這樣做),我是通過右鍵單擊表的Design視圖中的任意一列來創建一個新的關係,我想創建一個外鍵,並擊中關係。在出現的外鍵關係菜單中,我點擊底部的「添加」,然後展開「表格和列說明」部分。然後,我點擊「表格和列說明」旁邊的「...」,您可以選擇要關聯的列。

現在我偶爾遇到的問題是,如果你沒有在這裏確定這種關係,你就是爲這種情況設置自己的。原因是,當你點擊「添加」幾步後,你已經在這個表上創建了一個外鍵。即使您取消並關閉所有內容,該表仍保留該外鍵。如果你在這方面進行實驗,你可能已經意外創造了這種關係,那時你就不知道了。

我意識到我第一次開始時經常犯這個錯誤,因爲我在開始使用SQL Server 2008一年後回顧我的第一個項目,並且外鍵關係很有趣,因爲我有一噸的外鍵條目指向每個表格中的哪裏,我顯然只是在學習時才進行實驗。

另一件事,只是爲了覆蓋更多的基礎,是你提到你在數據庫圖表視圖中這樣做。不要以爲這有什麼問題,但我發現有時候通過GUI來做事情,它可能會有些不禮貌。因此,我的意思是,有時候我會想做一個非常小小的改變,但是GUI會告訴我,在桌子製作完成後我不能做那種改變。但是,如果我只是通過輸入查詢來完成我想要做的事情,那麼它運行得很好。

嘗試查看是否具有所需功能的最終測試是簡單地嘗試放入一個會違反外鍵約束的記錄。如果它通過,那麼這種關係就不存在或者設置不正確。如果失敗了,那麼你知道你已經有了你想要的東西。

我認爲你有一些downvotes,因爲這不是一個非常複雜的問題/應該通常自己解決,特別是與谷歌。既然不是這樣,但是你無論如何也不願意發帖,我假設你對此有點新鮮,所以我只是想拋棄我作爲新手的建議。不要讓降價讓你失望,也許下次再問一個更具體的問題,而不是「什麼是錯的?」。例如,「這個錯誤似乎告訴我鑰匙已經存在,誰能告訴我如何檢查和看看已經存在的關係?我不記得建立這種關係,這怎麼會發生?」等等。

+2

謝謝。這真的有幫助。在發佈新問題時,我一定會記住你的建議。 – Cancer 2012-01-20 06:13:17

1

一個簡單的答案:你的表中有數據會破壞這種關係,所以你不能創建關係。

在這種情況下,檢查Employee表並查找EmployeeType(EmployeeTypeId?)的id爲NULL或非法(不在EmployeeType表中找到)的行。修復這些行,關係將保存成功。