sql-server – 大量插入Sql Server

前端之家收集整理的这篇文章主要介绍了sql-server – 大量插入Sql Server前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从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的使用.

猜你在找的MsSQL相关文章