我试图从Vb.Net将大量记录插入到sql Server 2005中.虽然插入工作正常,但我尽全力尽快做到这一点.目前,10万条记录需要约11分钟.从应用程序中将大量记录插入sql Server的建议方法是什么?
我目前的apporach基本上是打开连接,迭代我的信息列表,并且关闭个别的sql插入文件,然后关闭连接.任何人都有更好的建议如何做到这一点?
当前功能:
Public Sub BatchInsert(ByVal ParamCollections As List(Of sqlParameter())) Dim Conn As sqlConnection = New sqlConnection(DBHelper.DatabaseConnection) Using scope As TransactionScope = New TransactionScope() Using Conn Dim cmd As sqlCommand = New sqlCommand("sproc_name",Conn) Conn.Open() cmd.CommandType = CommandType.StoredProcedure For i = 0 To ParamCollections.Count - 1 cmd.Parameters.Clear() cmd.Parameters.AddRange(ParamCollections(i)) cmd.ExecuteNonQuery() Next Conn.Close() scope.Complete() End Using End Using End Sub
解决方法
使用
SqlBulkCopy类,它将能够比单个插入更快地运行这些100K行.
哦,如果可以的话,我会敦促你实施一个IDataReader能力的课程,以提供SqlBulkCopy.WriteToServer(IDataReader)的方法,这样可以让你按顺序生成数据,一次一行.例如,如果从文本文件导入,则构建一些IEnumerable< T>使用收益回报并将其转换为IDataReader对象的方法将允许您将数据自然地提供给服务器.
为了防止BCP丢失回滚能力,您可以将数据传输到临时表中,然后在服务器上执行正常的INSERT INTO语句,将数据从临时表批量传输到生产表中,这将允许您使用最后一个传输部分的事务,并且仍将比原始的单个insert语句运行得快很多.
编辑:和Here’s an example(C#,但应该很容易转换为VB.Net)的大容量加载API的使用.