【问题标题】:Is it possible to get the values of a row when having constraints violation?违反约束时是否可以获取行的值?
【发布时间】:2016-02-03 15:59:44
【问题描述】:

在批量插入数千条记录时,我收到异常消息“外键约束违规”。

不幸的是,消息没有提供错误数据记录的线索。

是否有任何技巧可以获取有关问题的更详细信息?否则调试此类问题真的很痛苦。

【问题讨论】:

  • 你在使用实体框架吗?
  • 不应将数据直接导入目标表。您应该将数据导入临时表,然后您可以查询坏行并只插入好行。
  • 命名约束也是一个好习惯,这样您就可以知道哪些外键被违反了。
  • @Aaron 不,只是批量插入,纯 ado.net
  • @Rumbleweed 他们被命名了。总比没有好,但还是不要太多:)

标签: sql-server debugging


【解决方案1】:

我相信您可以为 OnRowUpdated 事件添加一个处理程序,您可以在其中检查错误并查看有关特定行的信息。

请参阅此答案以获取示例作为起点: How to track which row update failed in batch update

对于 SqlBulkCopy,请查看此 CodeProject 文章: http://www.codeproject.com/Articles/387465/Retrieving-failed-records-after-an-SqlBulkCopy-exc

【讨论】:

  • 唉,SqlBulkCopy 类没有提供这个事件。
  • 啊,我现在明白了。您是否已经查看过这个人的 CodeProject 文章? codeproject.com/Articles/387465/…
  • 非常好的和简单的想法。遇到异常后,最好牺牲一点性能并重复操作,慢慢收集数据,以便更快地隔离问题。
猜你喜欢
  • 2014-03-23
  • 1970-01-01
  • 2011-01-11
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2022-01-07
相关资源
最近更新 更多