zoukankan      html  css  js  c++  java
  • sql 批量插入数据到Sqlserver中 效率较高的方法

    使用SqlBulk

    #region 方式二
    static void InsertTwo()
    {
    Console.WriteLine("使用Bulk插入的实现方式");
    Stopwatch sw = new Stopwatch();
    DataTable dt = GetTableSchema();

    using (SqlConnection conn = new SqlConnection(StrConnMsg))
    {
    SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
    bulkCopy.DestinationTableName = "Product";
    bulkCopy.BatchSize = dt.Rows.Count;
    conn.Open();
    sw.Start();

    for (int i = 0; i < totalRow;i++ )
    {
    DataRow dr = dt.NewRow();
    dr[0] = Guid.NewGuid();
    dr[1] = string.Format("商品", i);
    dr[2] = (decimal)i;
    dt.Rows.Add(dr);
    }
    if (dt != null && dt.Rows.Count != 0)
    {
    bulkCopy.WriteToServer(dt);
    sw.Stop();
    }
    Console.WriteLine(string.Format("插入{0}条记录共花费{1}毫秒,{2}分钟", totalRow, sw.ElapsedMilliseconds, GetMinute(sw.ElapsedMilliseconds)));
    }
    }
    static DataTable GetTableSchema()
    {
    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[] {
    new DataColumn("Id",typeof(Guid)),
    new DataColumn("Name",typeof(string)),
    new DataColumn("Price",typeof(decimal))});
    return dt;
    }
    #endregion

    插入100w条记录才8s多,是不是很溜。

    使用TVPs(表值参数)插入数据

    从sqlserver 2008起开始支持TVPs。创建缓存表ProductTemp ,执行如下SQL。

    CREATE TYPE ProductTemp AS  TABLE(
    Id UNIQUEIDENTIFIER PRIMARY KEY,
    NAME VARCHAR(50) NOT NULL,
    Price DECIMAL(18,2) NOT NULL
    )

    可见插入100w条记录共花费了11秒多。
  • 相关阅读:
    Ubuntu下安装、激活并配置Pycharm
    高分辨率下firefox字体和界面自动放大的问题
    Java如何根据IP获取当前定位
    WebSocket介绍和一个简单的聊天室
    java注解处理
    TCP/IP协议三次握手与四次握手流程解析
    mybatis如何做分页处理
    xshell学习笔记
    正交表生成工具 PICT 成对组合覆盖 收藏
    Ready api groovy script 参数化
  • 原文地址:https://www.cnblogs.com/yangpeng-jingjing/p/6155098.html
Copyright © 2011-2022 走看看