批量插入操作处理记录没有错误

时间:2016-04-05 23:39:50

标签: c# sql-server bulkinsert

据我所知,使用C#和SQL Server批量插入数据的最佳方法是使用表类型并传入数据表。 我们当前的流程是一次处理/插入一条记录(即使有数千条记录),这样我们就能够成功处理有效记录并报告错误。显然这是一个巨大的性能问题。

有没有办法进行批量插入操作,允许插入有效记录,无效记录失败? 如果是这样,你如何找出哪些记录通过,哪些记录失败或导致错误?

1 个答案:

答案 0 :(得分:0)

我认为只有SSIS可以做你所描述的。我过去所做的是使用SQLXML将数据批量加载到SQL Server(https://msdn.microsoft.com/en-us/library/ms171993.aspx)。

基本上我所做的就是:

  1. 创建一个与表结构相对应的XML Schema并添加映射属性(请参阅此处https://msdn.microsoft.com/en-us/library/ms171721.aspx
  2. 使用XML Schema从C#创建XML文件以进行数据序列化
  3. 由于在BulkInsert等第一个错误中XML Bulk加载失败,我不得不使用XMLReader解析XML文档(串行支持大型XML文件)并根据模式对其进行验证。这样我知道哪些元素不符合模式,我可以删除它们并将它们存储在另一个XML文件中。
  4. 将固定XML文件批量加载到SQL Server表
  5. 所以这里的主要I / O包括:有一个读取器流来读取XML和2个写入器流来写入有效和无效的XML文件,最后批量加载有效的XML文件。

    性能非常好btw(我可以在不到5分钟的时间内在我的笔记本电脑上批量加载1GB文件,但这可能会因磁盘速度和CPU而异)。内存利用率非常低btw。