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秒多。
  • 相关阅读:
    pair和map
    lower_bound( )和upper_bound( )
    P1886 滑动窗口 /【模板】单调队列
    数的度(数位dp)
    最小生成树
    刷题-力扣-1052. 爱生气的书店老板
    刷题-力扣-766. 托普利茨矩阵
    刷题-力扣-28. 实现 strStr()
    刷题-力扣-697. 数组的度
    刷题-力扣-1004. 最大连续1的个数 III
  • 原文地址:https://www.cnblogs.com/yangpeng-jingjing/p/6155098.html
Copyright © 2011-2022 走看看