我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQLServer 中怎样批量插入数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQLServer 中怎样批量插入数据

SQLServer 中怎样批量插入数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

运行下面的脚本,建立测试数据库和表值参数。

、代码如下: --Create DataBase create database BulkTestDB; go use BulkTestDB; go --Create Table Create table BulkTestTable( Id int primary key, UserName nvarchar(32), Pwd varchar(16)) go --Create Table Valued CREATE TYPE BulkUdt AS TABLE (Id int, UserName nvarchar(32), Pwd varchar(16))

下面我们使用最简单的Insert语句来插入100万条数据,代码如下:

 Stopwatch sw = new Stopwatch(); SqlConnection sqlConn = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);//连接数据库 SqlCommand sqlComm = new SqlCommand(); sqlComm.CommandText = string.Format("insert into BulkTestTable(Id,UserName,Pwd)values(@p0,@p1,@p2)");//参数化SQL sqlComm.Parameters.Add("@p0", SqlDbType.Int); sqlComm.Parameters.Add("@p1", SqlDbType.NVarChar); sqlComm.Parameters.Add("@p2", SqlDbType.VarChar); sqlComm.CommandType = CommandType.Text; sqlComm.Connection = sqlConn; sqlConn.Open(); try { //循环插入100万条数据,每次插入10万条,插入10次。 for (int multiply = 0; multiply < 10; multiply++) { for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++) { sqlComm.Parameters["@p0"].Value = count; sqlComm.Parameters["@p1"].Value = string.Format("User-{0}", count * multiply); sqlComm.Parameters["@p2"].Value = string.Format("Pwd-{0}", count * multiply); sw.Start(); sqlComm.ExecuteNonQuery(); sw.Stop(); } //每插入10万条数据后,显示此次插入所用时间 Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds)); } } catch (Exception ex) { throw ex; } finally { sqlConn.Close(); } Console.ReadLine();

由于运行过慢,才插入10万条就耗时72390 milliseconds,所以我就手动强行停止了。 下面看一下使用Bulk插入的情况: bulk方法主要思想是通过在客户端把数据都缓存在Table中,然后利用SqlBulkCopy一次性把Table中的数据插入到数据库 代码如下:复制代码 代码如下: public static void BulkToDB(DataTable dt) { SqlConnection sqlConn = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn); bulkCopy.DestinationTableName = "BulkTestTable"; bulkCopy.BatchSize = dt.Rows.Count; try { sqlConn.Open(); if (dt != null && dt.Rows.Count != 0) bulkCopy.WriteToServer(dt); } catch (Exception ex) { throw ex; } finally { sqlConn.Close(); if (bulkCopy != null) bulkCopy.Close(); } } public static DataTable GetTableSchema() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[]{ new DataColumn("Id",typeof(int)), new DataColumn("UserName",typeof(string)), new DataColumn("Pwd",typeof(string))}); return dt; } static void Main(string[] args) { Stopwatch sw = new Stopwatch(); for (int multiply = 0; multiply < 10; multiply++) { DataTable dt = Bulk.GetTableSchema(); for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++) { DataRow r = dt.NewRow(); r[0] = count; r[1] = string.Format("User-{0}", count * multiply); r[2] = string.Format("Pwd-{0}", count * multiply); dt.Rows.Add(r); } sw.Start(); Bulk.BulkToDB(dt); sw.Stop(); Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds)); } Console.ReadLine(); }

耗时图如下: 可见,使用Bulk后,效率和性能明显上升。使用Insert插入10万数据耗时72390,而现在使用Bulk插入100万数据才耗时17583。 最后再看看使用表值参数的效率,会另你大为惊讶的。 表值参数是SQL Server 2008新特性,简称TVPs。对于表值参数不熟悉的朋友,可以参考最新的book online,我也会另外写一篇关于表值参数的博客,不过此次不对表值参数的概念做过多的介绍。言归正传,看代码:复制代码 代码如下: public static void TableValuedToDB(DataTable dt) { SqlConnection sqlConn = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString); const string TSqlStatement = "insert into BulkTestTable (Id,UserName,Pwd)" + " SELECT nc.Id, nc.UserName,nc.Pwd" + " FROM @NewBulkTestTvp AS nc"; SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn); SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt); catParam.SqlDbType = SqlDbType.Structured; //表值参数的名字叫BulkUdt,在上面的建立测试环境的SQL中有。 catParam.TypeName = "dbo.BulkUdt"; try { sqlConn.Open(); if (dt != null && dt.Rows.Count != 0) { cmd.ExecuteNonQuery(); } } catch (Exception ex) { throw ex; } finally { sqlConn.Close(); } } public static DataTable GetTableSchema() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[]{ new DataColumn("Id",typeof(int)), new DataColumn("UserName",typeof(string)), new DataColumn("Pwd",typeof(string))}); return dt; } static void Main(string[] args) { Stopwatch sw = new Stopwatch(); for (int multiply = 0; multiply < 10; multiply++) { DataTable dt = TableValued.GetTableSchema(); for (int count = multiply * 100000; count < (multiply + 1) * 100000; count++) { DataRow r = dt.NewRow(); r[0] = count; r[1] = string.Format("User-{0}", count * multiply); r[2] = string.Format("Pwd-{0}", count * multiply); dt.Rows.Add(r); } sw.Start(); TableValued.TableValuedToDB(dt); sw.Stop(); Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds)); } Console.ReadLine(); }

关于SQLServer 中怎样批量插入数据问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQLServer 中怎样批量插入数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQLServer批量插入数据怎么实现

在SQL Server中,可以使用以下方法来实现批量插入数据:使用INSERT INTO VALUES语句来一次性插入多条数据,例如:INSERT INTO table_name (column1, column2, column3) V
SQLServer批量插入数据怎么实现
2024-04-09

SqlServer中BULK INSERT用法简介,批量插入数据

BULK INSERT是SqlServer中用于批量插入数据的命令。它可以将来自外部文件的数据快速加载到表中,比逐行插入数据的方式更高效。BULK INSERT的用法如下:1. 创建目标表:在执行BULK INSERT之前,需要先创建一个目
2023-09-16

MyBatis中怎么批量插入数据

在MyBatis中,可以使用foreach标签来实现批量插入数据。具体步骤如下:创建一个Mapper接口,定义一个insertBatch方法用于批量插入数据。public interface UserMapper {void insertB
MyBatis中怎么批量插入数据
2024-03-07

SQLServer批量插入数据的方式有哪些

本篇内容主要讲解“SQLServer批量插入数据的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQLServer批量插入数据的方式有哪些”吧!技术方案一:压缩时间下程序员写出的第一个
2023-06-22

数据库中怎么批量插入数据

本文小编为大家详细介绍“数据库中怎么批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“数据库中怎么批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。批量插入批量插入使用 executemany(
2023-06-08

SQLServer中怎么执行批量插入操作

在SQL Server中,可以使用以下方法执行批量插入操作:使用INSERT INTO VALUES语句进行批量插入操作。例如:INSERT INTO table_name (column1, column2) VALUES (value
SQLServer中怎么执行批量插入操作
2024-03-11

sql怎么批量插入数据

对于 sql 中的批量插入数据,提供了 4 种主要方法:1. insert into 语句 2. insert 语句与 select 3. load data infile 语句 4. bulk insert 语句(仅 microsoft
sql怎么批量插入数据
2024-05-30

SQLSERVER怎么大批量导入数据

在SQL Server中,可以使用以下方法进行大批量数据导入:1. 使用BULK INSERT语句:BULK INSERT语句允许从外部数据文件中导入数据到SQL Server表中。首先,确保你的数据文件符合SQL Server的要求(例如
2023-08-18

Dictionary中怎么批量插入日志数据

本篇文章为大家展示了Dictionary中怎么批量插入日志数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。问题窥探首先,我想到的是Dictionary,对于C#中的Dictionary类相信大家都
2023-06-15

编程热搜

目录