[SQL Server] 批量插入数据

在做大量数据流处理时,我们经常会遇到批量插入记录的情况,下面收录一些

1. Bcp

1> 创建一个DataTable(schema应和对应的DB Table一致), 或者创建一些临时表

2>向数据表中注入我们的数据

3>按照以下办法Call Bcp

4> 完成

SqlConnection cn = new
System.Data.SqlClient.SqlBulkCopy bc = new System.Data.SqlClient.SqlBulkCopy(cn, SqlBulkCopyOptions.TableLock, null);
            bc.BulkCopyTimeout = 600;
            bc.BatchSize = dt.Rows.Count;
            cn.Open();
            bc.DestinationTableName = <db Table>;
            bc.WriteToServer(dt);
            cn.Close();
            bc.Close();


   

2. XML数据类型

以XML格式插入批量记录,在SqlServer 2005开始支持XML数据类型

优点:在程序中,将批量记录作为参数一次性传送到数据库段,较之前的逐个记录的插入有很大进步

缺点:只有在记录数较少,XML结构较简单(层级较少)时,效率较高;而且,不易使用和代码维护

 

3. DataTable数据类型

在SqlServer 2008开始支持DataTable数据类型,这个是相对之前XML类型的进步和改善

优点:是最简单且最受推荐的作为存储过程的参数传入记录的方法

 

4. ADO.NET BatchUpdate()

e.g.

using (SqlTransaction sqlTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted))
            {
                try
                {


                    DataTable dtInsertRows -> construct the datatable with values

                    var cmd = conn.CreateCommand();

            cmd.Transaction = sqlTrans;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_name";
            cmd.UpdatedRowSource = UpdateRowSource.None;

            cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier, 16, dtInsertRows.Columns["id"].ColumnName);

using (SqlDataAdapter dataAdapter = new SqlDataAdapter())
                        {
                            dataAdapter.InsertCommand = cmd;
                            dataAdapter.UpdateBatchSize = 100;
                            dataAdapter.Update(dtInsertRows);
                        }
                    }

                    sqlTrans.Commit();
                }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值