SQL Server 批量插入数据常用方法:
一、普通的Insert插入
二、拼接BatchInsert插入
三、SqlBulkCopy插入
以上3种方法插入数据的速度比较:(ms:毫秒,1000 毫秒 = 1秒)
由于电脑硬件情况不一样,以下数据仅供参考,不一样的电脑会有所偏差,但不影响比较,因为在一样的硬件环境下。
1、以一次插入1万条数据看:
采用Insert 需要 1501.322ms,
采用BatchInsert 需要850.6261ms,
采用SqlBulkCopy需要30.4119ms
2、以一次插入10万条数据看:
采用Insert 需要 13875.3234ms,
采用BatchInsert 需要8278.4052ms,
采用SqlBulkCopy需要314.7301ms。
通过比较采用SqlBulkCopy是最快的一种方法,特别适合用于大批量数据的插入,比如一次插入上百万条数据等情况。在C#开发语言中有一个SqlBulkCopy 类,命名空间:System.Data.SqlClient。
如何在 C# 中使用 SqlBulkCopy DEMO:
using System;
using System.Data;
using System.Data.SqlClient;
namespace SqlBulkCopyDemo
{
/*
-- 测试表创建
IF OBJECT_ID('t') IS NOT NULL
DROP TABLE t
GO
CREATE TABLE t(
id INT PRIMARY KEY,
[name] NVARCHAR(20) NOT NULL
)
GO
*/
class Program
{
static void MAIn(string[] args)
{
//连接数据库
string connString = "data source=(local);initial catalog=test;Integrated Security=True";
string sql = "select * from t where 1=0";
DataTable dt = null;
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
dt = new DataTable();
adapter.Fill(dt);
}
for (int i = 1; i <= 10; i++) {
DataRow dr = dt.NewRow();
dr["id"] = i;
dr["name"] = "n" + i.ToString();
dt.Rows.Add(dr);
}
//dt已有数据
//给表t批量插入数据
using(SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.DestinationTableName = "t"; //需要插入数据的表名
bulkCopy.WriteToServer(dt); //将DataTable中的数据写入表中
}
}
Console.Read();
}
}
}