• 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();  

     

    优点:速度中等

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

  • 相关阅读:
    【视频剪辑】 Land of Dreams 航拍中国新疆篇 剪辑
    【视频剪辑】 2018年中国海空军掠影
    【视频剪辑】 成都雅安旅行vlog
    【PL/SQL】 学习笔记 (3)if 语句使用
    【PL/SQL】 学习笔记 (2)引用型变量和记录型变量
    dubbo远程方法调用的基本原理
    java8中的接口与时间操作
    接入天猫精灵auth2授权页面https发送ajax请求
    java8 流操作
    Lambda表达式和方法引用
  • 原文地址:https://www.cnblogs.com/quandeboke/p/3175111.html
Copyright © 2020-2023  润新知