2012-12-12 234 views
1

我批量插入一長串對象。 比我執行提交。爲什麼違反FK違規的SqlException不會顯示違規值?

它與錯誤有時會失敗(C#)

"The INSERT statement conflicted with the FOREIGN KEY constraint "FK_MyFK". The conflict occurred in database "DCDCommunity", table "MySchema.MyTable", column 'Id'.\r\nThe statement has been terminated."}
System.Exception {System.Data.SqlClient.SqlException}

現在,我必須寫一個程序,我的數據文件迭代來發現價值或我能得到它在例外?

+1

RE:標題中的問題唯一可以給你官方解釋的人是Microsoft。 [在連接上啓動它](https://connect.microsoft.com/SQLServer/Feedback)唯一違反約束的消息沒有告訴您在最近版本之前引發錯誤的違規值。我寧願看到「字符串或二進制數據會被截斷」的消息,但首先會有所改進。 –

+0

我記得這個數據在其他數據庫中也不可用。我認爲這是標準的一部分。 – Jeb

回答

0

我無法回答「爲什麼?」但我可以提供一個建議 - 在進行批量插入之前對數據進行一些預先檢查,以確保外鍵有效,並且您可能會面對任何其他數據問題 - 例如檢查字符串長度以避免「字符串或二進制數據將被截斷「錯誤,如評論中所述。

+0

是的,但是進行預檢需要時間並且容易出現很多錯誤。在分佈式系統環境中,我將不得不確保數據庫在檢查過程中被鎖定,然後插入我的數據。然後,數據庫將執行自己的檢查。這可能會更線程/過程安全,我只能計算這些。我只需要違規價值 – Jeb