zoukankan      html  css  js  c++  java
  • 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();  

     

    优点:速度中等

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

  • 相关阅读:
    学习笔记1:性能问题在于你想不到的任何地方!
    React Native控件之PullToRefreshViewAndroid下拉刷新组件解说(20)
    CSDN-markdown编辑器之导入导出文档功能
    无名管道与有名管道通讯编程
    LeetCode Remove Nth Node From End of List
    libpcap出错信息调试函数pcap_geterr, pcap_perror
    工作流学习——Activiti流程实例、任务管理四步曲
    B
    oracle学习笔记 oracle软件安装和数据库的创建
    路由器逆向分析------MIPS系统网络的配置(QEMU)
  • 原文地址:https://www.cnblogs.com/quandeboke/p/3175111.html
Copyright © 2011-2022 走看看