• 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秒多。
  • 相关阅读:
    在jQuery中.bind() .live() .delegate() .on()的区别
    jquery小结测试题
    揭秘子类构造函数执行过程
    过滤器
    实现AJAX的基本步骤
    AJAX 原生态
    java工程师需要学什么
    Java进阶之路
    git入门大全
    轻松学JVM
  • 原文地址:https://www.cnblogs.com/yangpeng-jingjing/p/6155098.html
Copyright © 2020-2023  润新知