将数据批量插入SQL Server

将数据批量插入SQL Server,第1张

概述本文转载自:http://richorama.github.io/2017/11/28/sql-bulk-copy/ 将数据批量插入SQL Server 假设在SQL Server中有一个简单的表 C

本文转载自:http://richorama.github.io/2017/11/28/sql-bulk-copy/

将数据批量插入sql Server

假设在sql Server中有一个简单的表

CREATE table [dbo].test](    Value] varchar](36) NOT NulL)

…我们要在其中插入.NET应用程序中的数千个值(GuID)。

逐个

天真的方法是一次插入一个,如下所示:

public voID OneByOne(){    const string sql = "INSERT INTO [Test] ([Value]) Values (@Value)";    for (var i = 0; i < count; i++)    {        connection.Execute(sql,new { Value = GuID.NewGuID().ToString()});    }}

(请注意,此代码使用Dapper)

在本地sql Express数据库上插入10,000条记录需要54,533毫秒,即每秒183条记录慢:¬(

一次1000

sql Server允许您在单个插入语句中插入多个记录,实际上我们一次最多可以插入1,000条。

 BatchOf1000(){    foreach (var batch in Enumerable.Range(0,count).Chunk(1000))    {        if (batch.Length == 0) continue;        var sql = INSERT INTO [Test] ([Value]) VALUES \r\n" + string.Join(,\r\n",batch.Select(x => $('{GuID.NewGuID().ToString()}')));        connection.Execute(sql);    }}

 

在本地sql Express数据库上插入1,000,000条记录需要22,256毫秒,即每秒44,931条记录必须更快。

批量复制

我们可以快点走吗?当然,我们可以。

sql Server(和Azure中的sql数据库)支持批量插入,您过去可能使用过bcp。

sqlBulkcopy类提供了从.NET方便地访问此。

 Bulkcopy(){    var table = new Datatable();    table.Columns.Add(Valuetypeof(string));    )    {        table.Rows.Add(GuID.NewGuID().ToString());    }    using (var bulk = new sqlBulkcopy(this.connection))    {        bulk.Destinationtablename = test;        bulk.WritetoServer(table);    }}

在本地sql Express数据库上插入1,000条记录需要9,315毫秒,即每秒107,353条记录甚至更快。

关于sqlBulkcopy的说明

上面的代码示例显示,在C#中,您必须首先创建一个Datatable,然后将其告知目标表的架构。然后,根据值在表中的位置添加值。

这段代码对表结构的更改有些脆弱,因此另一种方法是从数据库中加载表结构,然后按名称而不是位置插入值:

 Datatable();    // read the table structure from the database    var adapter = new sqlDataAdapter($SELECT top 0 * FROM test.connection))    {        adapter.Fill(table);    };    )    {        var row = table.NewRow();        row["] = GuID.NewGuID().ToString();         table.Rows.Add(row);    }    ;        bulk.WritetoServer(table);    }}

我注意到使用sqlBulkcopy产生少量开销,因此我不会将其用于插入少量记录(即少于100条),但是您的里程可能会有所不同。

插入愉快!

总结

以上是内存溢出为你收集整理的将数据批量插入SQL Server全部内容,希望文章能够帮你解决将数据批量插入SQL Server所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存