2010-06-03 143 views
151

我收到以下錯誤。你可以幫我嗎?INSERT語句與FOREIGN KEY約束衝突

消息547,級別16,狀態0,第1行
INSERT語句衝突與外鍵約束 「FK_Sup_Item_Sup_Item_Cat」。衝突發生在數據庫「dev_bo」,表「dbo.Sup_Item_Cat」中。該語句已終止。

代碼:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
         status_code, last_modified_user_id, last_modified_timestamp, client_id) 
values (10162425, 10, 'jaiso', '123123', 
     'a', '12', '2010-12-12', '1062425') 

最後一列client_id導致錯誤。我嘗試將dbo.Sup_Item_Cat中已存在的值放入列中,對應於sup_item ..但沒有快樂:-(

+10

您已嘗試將記錄插入到您的「Sup_Item_Cat」表中沒有匹配類別記錄的項目表中。沒什麼其他可以說的。 – 2010-06-03 12:27:31

+1

所以你是說'SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id ='123123''返回結果? – 2010-06-03 12:36:16

+2

你也說「最後一次coulum」client_id「我正在發生衝突。」這不是錯誤信息暗示我認爲你在錯誤的地方尋找你的問題。 – 2010-06-03 12:38:32

回答

185

在您的表dbo.Sup_Item_Cat中,它具有對另一個表的外鍵引用。 FK工作的方式是它不能在該列中具有不在被引用表的主鍵列中的值。

如果您有SQL Server Management Studio,請將其打開,並使用sp_help'dbo.Sup_Item_Cat'。查看FK所在的列,以及它引用哪個表的列。你正在插入一些不好的數據。

讓我知道你是否需要任何解釋更好的東西!

+4

感謝您使用sp_help命令!幫助我縮小了我的類似問題。 – 2012-06-05 15:36:11

+0

事實上 - 在我的情況下,該屬性只是沒有從視圖發回控制器,所以它始終爲0(這不是一個有效的ID,但控制器將無法知道這一點。) – neminem 2013-12-04 19:49:39

4

它意味着它的含義。您試圖將值插入列在其上有一個FK約束不查找表匹配任何值。

14

你需要發表您的發言更多的澄清。但是......

該錯誤意味着表你將數據插入與另一個表具有外鍵關係在插入數據之前,外鍵字段中的值必須存在於另一個表中第一。

14

您正嘗試在外鍵表中不存在的外鍵列中插入具有值的記錄。

例如:如果書籍和作者表中的書籍在作者表上有外鍵約束,並且您嘗試插入沒有作者記錄的書籍記錄。

順便說一句,在Google一個簡單的搜索會給你答案......

+0

請檢查我編輯的問題 – SmartestVEGA 2010-06-03 12:35:30

+2

@伊恩編輯了我的最後一句話。我把它放回去了。最後一個陳述並不是「咆哮」,它是一個有用的鏈接,可以鏈接到谷歌搜索,它將返回OP正在尋找的答案。我仍然相信「教人釣魚」。溫和提醒自己可以對OP,讀者和本網站產生積極的影響。根據我的愚見,在請別人花時間回答你的問題之前,最好先用盡自己的研究。這個問題現在已經成爲谷歌搜索的首要問題。 – 2016-01-04 18:39:41

6

的問題不是從我所看到的CLIENT_ID。它看起來更像問題是與第4列,sup_item_cat_id

我會跑

sp_helpconstraint sup_item 

並注意外鍵FK_Sup_Item_Sup_Item_Cat確認其列是實際的問題列返回constraint_keys,但我非常確定這不是你正在嘗試解決的問題。除了「123123」外,還有可疑之處。

3

仔細檢查外鍵定義的關係中的字段。在定義關係時,SQL Server Management Studio可能沒有您想要選擇的字段。這已經燒傷了我過去。

81

我自己有這個問題,關於嘗試填充外鍵字段時收到的錯誤消息。我結束了這個頁面,希望找到答案。在這個頁面上檢查的答案確實是正確的,不幸的是我覺得對於不熟悉SQL的人來說答案有點不完整。我相當擅長編寫代碼,但SQL查詢對我來說是新手,也是構建數據庫表的工具。

儘管檢查的答案是正確的:

麥克中號wrote-

「一個FK的工作方式是不能在列,它是 不也是在主鍵有一個值被引用表的列「。

這個答案缺少的是簡單的;

您必須首先構建包含主鍵的表。

另一種說法是:

您必須將數據插入父表,包含主 重點,試圖將數據插入含有 外鍵的子表之前。

總之,許多教程似乎玻璃在這個事實,這樣,如果你要自己嘗試一下,並沒有意識到有操作的順序,那麼你會得到這個錯誤。當然,在添加主鍵數據後,子表中的外鍵數據必須符合父表中的主鍵字段,否則您仍然會收到此錯誤。

如果有人讀到這一點。我希望這有助於更清楚地檢查答案。我知道你們中有些人可能會覺得這樣的事情是相當困難的,打開一本書會在發佈之前回答這個問題,但事實是並非每個人都以相同的方式學習。

+0

並且我會添加,請確保分析您的查詢,因爲它並不總是將您認爲應該發送到數據庫的內容。 – HLGEM 2014-01-17 21:01:05

+0

感謝您的簡單... – 2018-01-02 14:22:59

2
  1. 運行sp_helpconstraint可
  2. 注意constraint_keys列返回外鍵
2

我有同樣的問題,當我用代碼優先遷移來構建我的數據庫中的MVC 5應用程序。我最終發現我的配置文件中的種子方法導致問題。我的種子方法是在創建具有匹配主鍵的條目之前爲包含外鍵的表創建表條目。

6

我發現的東西是所有的字段必須完全匹配。

例如,發送'貓狗'和發送'貓狗'不一樣。

我所做的解決這個問題的方法是從我插入數據的表格中編寫出FK代碼,記下具有約束的「外鍵」(在我的情況下有2個),並確保這些2個字段的值完全匹配,因爲它們在引發FK約束錯誤的表中。

一旦我解決了2個領域給我的問題,生活是美好的!

如果您需要更好的解釋,請告訴我。不存在

+0

這真的幫助我哈哈!忽略了這個事實,解決了我有的問題!謝謝 – 2015-04-24 10:51:51

3

父表中的數據,因此導致problem.For上述問題,該數據不可用在表dbo.Sup_Item_Cat」

+1

您的答案雖然可能沒有錯,但是如何提供其他答案中尚未包含的其他信息?請嘗試回答帖子,當您可以有其他答案尚未完全覆蓋的有效參數。 – 2015-03-05 09:43:35

3

父表中的數據丟失造成的問題。 在你的問題非可用性「dbo.Sup_Item_Cat」中的數據導致問題

2

當我的插入值字段包含對肉眼不明顯的標籤和空格時,我遇到了這個問題我在Excel中創建了我的值列表,將其粘貼到SQL,並運行查詢以查找我的FK字段上的不匹配項。

匹配查詢沒有檢測到我的FK字段中有選項卡和空格,但INSERT確實識別它們,並且它繼續生成錯誤。

我再次通過複製一個記錄中的FK字段的內容並將其粘貼到插入查詢中進行測試。當該記錄也失敗時,我仔細查看數據並最終檢測到標籤/空格。

一旦我清理刪除的標籤/空格,我的問題已解決。希望這可以幫助別人!

相關問題