SQL Server 批量插入數(shù)據(jù)常用方法:
一、普通的Insert插入
二、拼接BatchInsert插入
三、SqlBulkCopy插入
以上3種方法插入數(shù)據(jù)的速度比較:(ms:毫秒,1000 毫秒 = 1秒)
由于電腦硬件情況不一樣,以下數(shù)據(jù)僅供參考,不一樣的電腦會(huì)有所偏差,但不影響比較,因?yàn)樵谝粯拥挠布h(huán)境下。
1、以一次插入1萬條數(shù)據(jù)看:
采用Insert 需要 1501.322ms,
采用BatchInsert 需要850.6261ms,
采用SqlBulkCopy需要30.4119ms
2、以一次插入10萬條數(shù)據(jù)看:
采用Insert 需要 13875.3234ms,
采用BatchInsert 需要8278.4052ms,
采用SqlBulkCopy需要314.7301ms。
通過比較采用SqlBulkCopy是最快的一種方法,特別適合用于大批量數(shù)據(jù)的插入,比如一次插入上百萬條數(shù)據(jù)等情況。在C#開發(fā)語言中有一個(gè)SqlBulkCopy 類,命名空間:System.Data.SqlClient。
如何在 C# 中使用 SqlBulkCopy DEMO:
using System;
using System.Data;
using System.Data.SqlClient;
namespace SqlBulkCopyDemo
{
/*
-- 測(cè)試表創(chuàng)建
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)
{
//連接數(shù)據(jù)庫
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已有數(shù)據(jù)
//給表t批量插入數(shù)據(jù)
using(SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.DestinationTableName = "t"; //需要插入數(shù)據(jù)的表名
bulkCopy.WriteToServer(dt); //將DataTable中的數(shù)據(jù)寫入表中
}
}
Console.Read();
}
}
}