微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的使用.

原文地址:https://www.jb51.cc/mssql/82909.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐