将数据从C#插入SQL Server 2008 R2

时间:2012-12-08 16:59:08

标签: sql sql-server-2008-r2

我在C#中的内存(list<T>sortedlist<T,T>)中有近70亿行数据。我想将此数据插入SQL Server中的表中。为此,我为每个集合定义了不同的SqlConnection,并将连接池设置为False。

首先,我尝试使用连接模式(ExecuteNonQuery)插入数据。即使我定义了Parallel.Invoke并同时调用了不同集合的所有插入方法,它也太慢了,到现在为止我无法完成它(我无法区分顺序插入和并发插入之间的任何差异)。

另外,我尝试从SqlDataTable创建一个对象。要填充表格,我会从集合中读取所有数据,然后将数据添加到SqlDataTable。在这种情况下,我为SqlBatchSize=10000设置了SqlTimeOut=0SqlBulkCopy。但这个也很慢。

如何快速将大量数据插入SQL Server?

2 个答案:

答案 0 :(得分:1)

寻找'BULK INSERT'。该技术适用于各种RDBMS。基本上,您创建一个(文本)文件,每个记录一行,并告诉服务器使用此文本文件。这是我能想到的最快的方法。我用这种方式在几秒内导入了5000万行。

答案 1 :(得分:1)

您已经发现SqlBulkCopy,但您说它很慢。这可能是因为两个原因:

  1. 您使用的是小批量产品。尝试使用传递给WriteToServer的自定义IDataReader来流式传输行(或者只使用更大的DataTables)
  2. 您的表具有非聚簇索引。禁用它们预导入并重新生成它们
  3. 但是,你不能比批量导入更快。