使用批量插入/更新/删除时,如何跟踪失败的CRUD行?

时间:2017-03-03 08:56:15

标签: c# sql sql-server merge bulk

我试图找出如何在SQL数据库中的表上执行批量操作,我希望能够处理失败的行。

假设我在表中进行了10行的批量插入,第5行有一些错误的数据,无法插入。然后我想要插入其他9个行,但在某种程度上能够获得不能插入返回的1行,这样我就可以将这行存储在某个地方以便以后进行错误处理。

如果我可以使用一些nuget包进行C#编程,那就太棒了。

2 个答案:

答案 0 :(得分:0)

我猜你可以做一个触发而不是插入,检查数据是否有效。如果不是,您可以将其保存在另一个表中,您将从中检索有错误的行,如果行中没有错误,您可以将其插入原始表中。

答案 1 :(得分:0)

通常,最佳解决方案是尽可能早地验证错误数据。请考虑以下策略。

  1. 在c#代码中创建一个数据表,其中datacolumns精确匹配需要持久化的目标表的数据类型,长度,可空等。如果任何数据不符合,则在尝试插入数据表时会抛出异常。
  2. 从源数据填充数据表,一次填充一个数据行。如果行无法插入到数据表中,则异常处理可以捕获该行并根据需要记录该数据。
  3. 在SQL Server中创建自定义表值类型以匹配数据表。确保所有内容都匹配,包括每个数据列的所有元数据。
  4. 在SQL Server上创建包含table-values输入参数的存储过程。此参数将是在步骤3中创建的新自定义类型。然后可以使用表值参数将数据快速插入数据库表。
  5. 将数据表作为参数值传递给存储过程。数据类型应为SqlDbType.Structured。
  6. 此设计通过早期输入验证提高了速度和效率,同时允许流程批量传递数据,从而实现快速插入。