2012-12-12 194 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