SQLSERVER 大数据导入探索

  公司最近开发了一个功能,就是通过excel直接往数据库中导入大批量数据。于是在网上查找了几种方法,探索如下:

1.通过insert to 语句

实现:通过将数据导入到DataTable中然后逐条生成sql插入语句导入数据。

优点:简单

缺点:只能应付小数据,所以对于大数据不推荐

2.通过SqlBulkCopy方式

实现:

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);

sqlbulkcopy.DestinationTableName = "Product";//数据库中的表名

sqlbulkcopy.ColumnMappings.Add("ProductID""ProductID");//映射

 sqlbulkcopy.ColumnMappings.Add("ProductName""Name");

sqlbulkcopy.WriteToServer(dataset.Tables[0]);

优点:快

缺点:只能将数据直接复制到正式表中,不能将数据直接导入到tempdb数据库中的临时表中;SqlBulkCopy操作可能会导致对目标表元数据的更改(例如,禁用约束检查  时)。如果出现这种情况,访问大容量插入表的并发快照隔离事务将失败SqlBulkCopy将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时

机制:(1)利用BCP协议进行数据批量复制

3.使用标值参数

实现:

  数据库执行脚本如下

  CREATE TYPE TestType AS TABLE (  Id int NOT NULL  ,Name nvarchar(20) NOT NULL )

  CREATE PROC InsertData  @rows TestType READONLY as begin  set nocount on  insert into TestTable(Id, Name)   select Id, Name from @rows end

                  SqlParameter param = cmd.Parameters.AddWithValue("@rows", tempTable);  

                  param.SqlDbType = SqlDbType.Structured;  

                 param.TypeName = "TestType";  

               cmd.ExecuteNonQuery();  

 

优点:速度中等

缺点:要在数据库中创建表类型数据

转载于:https://www.cnblogs.com/quandeboke/p/3175111.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值