婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQLServer 批量插入數據的兩種方法

SQLServer 批量插入數據的兩種方法

熱門標簽:電銷機器人公司 需要哪些牌照 地圖標注牌 菏澤語音電銷機器人加盟公司 長沙智能外呼系統 湖南電腦外呼系統平臺 知名電銷機器人價格 分享百度地圖標注多個位置 外呼系統改進 廣東防封卡外呼系統原理是什么
運行下面的腳本,建立測試數據庫和表值參數。
復制代碼 代碼如下:

--Create DataBase
create database BulkTestDB;
go
use BulkTestDB;
go
--Create Table
Create table BulkTestTable(
Id int primary key,
UserName nvarchar(32),
Pwd varchar(16))
go
--Create Table Valued
CREATE TYPE BulkUdt AS TABLE
(Id int,
UserName nvarchar(32),
Pwd varchar(16))

下面我們使用最簡單的Insert語句來插入100萬條數據,代碼如下:
復制代碼 代碼如下:

Stopwatch sw = new Stopwatch();

SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);//連接數據庫

SqlCommand sqlComm = new SqlCommand();
sqlComm.CommandText = string.Format("insert into BulkTestTable(Id,UserName,Pwd)values(@p0,@p1,@p2)");//參數化SQL
sqlComm.Parameters.Add("@p0", SqlDbType.Int);
sqlComm.Parameters.Add("@p1", SqlDbType.NVarChar);
sqlComm.Parameters.Add("@p2", SqlDbType.VarChar);
sqlComm.CommandType = CommandType.Text;
sqlComm.Connection = sqlConn;
sqlConn.Open();
try
{
//循環插入100萬條數據,每次插入10萬條,插入10次。
for (int multiply = 0; multiply 10; multiply++)
{
for (int count = multiply * 100000; count (multiply + 1) * 100000; count++)
{

sqlComm.Parameters["@p0"].Value = count;
sqlComm.Parameters["@p1"].Value = string.Format("User-{0}", count * multiply);
sqlComm.Parameters["@p2"].Value = string.Format("Pwd-{0}", count * multiply);
sw.Start();
sqlComm.ExecuteNonQuery();
sw.Stop();
}
//每插入10萬條數據后,顯示此次插入所用時間
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
}

Console.ReadLine();

耗時圖如下:

使用Insert語句插入10萬數據的耗時圖

由于運行過慢,才插入10萬條就耗時72390 milliseconds,所以我就手動強行停止了。

下面看一下使用Bulk插入的情況:

bulk方法主要思想是通過在客戶端把數據都緩存在Table中,然后利用SqlBulkCopy一次性把Table中的數據插入到數據庫

代碼如下:

復制代碼 代碼如下:

public static void BulkToDB(DataTable dt)
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn);
bulkCopy.DestinationTableName = "BulkTestTable";
bulkCopy.BatchSize = dt.Rows.Count;

try
{
sqlConn.Open();
    if (dt != null dt.Rows.Count != 0)
    bulkCopy.WriteToServer(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
if (bulkCopy != null)
bulkCopy.Close();
}
}

public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
new DataColumn("Id",typeof(int)),
new DataColumn("UserName",typeof(string)),
    new DataColumn("Pwd",typeof(string))});

return dt;
}

static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
for (int multiply = 0; multiply 10; multiply++)
{
DataTable dt = Bulk.GetTableSchema();
for (int count = multiply * 100000; count (multiply + 1) * 100000; count++)
{
DataRow r = dt.NewRow();
r[0] = count;
r[1] = string.Format("User-{0}", count * multiply);
r[2] = string.Format("Pwd-{0}", count * multiply);
dt.Rows.Add(r);
}
sw.Start();
Bulk.BulkToDB(dt);
sw.Stop();
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}

Console.ReadLine();
}

耗時圖如下:
使用Bulk插入100萬數據的耗時圖

可見,使用Bulk后,效率和性能明顯上升。使用Insert插入10萬數據耗時72390,而現在使用Bulk插入100萬數據才耗時17583。

最后再看看使用表值參數的效率,會另你大為驚訝的。

表值參數是SQL Server 2008新特性,簡稱TVPs。對于表值參數不熟悉的朋友,可以參考最新的book online,我也會另外寫一篇關于表值參數的博客,不過此次不對表值參數的概念做過多的介紹。言歸正傳,看代碼:
復制代碼 代碼如下:

public static void TableValuedToDB(DataTable dt)
{
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString);
const string TSqlStatement =
"insert into BulkTestTable (Id,UserName,Pwd)" +
" SELECT nc.Id, nc.UserName,nc.Pwd" +
" FROM @NewBulkTestTvp AS nc";
SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
catParam.SqlDbType = SqlDbType.Structured;
//表值參數的名字叫BulkUdt,在上面的建立測試環境的SQL中有。
catParam.TypeName = "dbo.BulkUdt";
try
{
sqlConn.Open();
if (dt != null dt.Rows.Count != 0)
{
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sqlConn.Close();
}
}

public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]{
new DataColumn("Id",typeof(int)),
new DataColumn("UserName",typeof(string)),
new DataColumn("Pwd",typeof(string))});

return dt;
}

static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
for (int multiply = 0; multiply 10; multiply++)
{
DataTable dt = TableValued.GetTableSchema();
for (int count = multiply * 100000; count (multiply + 1) * 100000; count++)
{
DataRow r = dt.NewRow();
r[0] = count;
r[1] = string.Format("User-{0}", count * multiply);
r[2] = string.Format("Pwd-{0}", count * multiply);
dt.Rows.Add(r);
}
sw.Start();
TableValued.TableValuedToDB(dt);
sw.Stop();
Console.WriteLine(string.Format("Elapsed Time is {0} Milliseconds", sw.ElapsedMilliseconds));
}

Console.ReadLine();
}

耗時圖如下:

使用表值參數插入100萬數據的耗時圖

比Bulk還快5秒。
此文原創自CSDN TJVictor

您可能感興趣的文章:
  • 詳解C#批量插入數據到Sqlserver中的四種方式
  • C#批量插入數據到Sqlserver中的三種方式
  • c#幾種數據庫的大數據批量插入(SqlServer、Oracle、SQLite和MySql)
  • SQL Server中數據行批量插入腳本的存儲實現
  • SQL Server使用一個語句塊批量插入多條記錄的三種方法
  • SQL Server 批量插入數據的完美解決方案

標簽:美容院 福建 商洛 呼和浩特 珠海 西寧 天水 泉州

巨人網絡通訊聲明:本文標題《SQLServer 批量插入數據的兩種方法》,本文關鍵詞  SQLServer,批量,插入,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLServer 批量插入數據的兩種方法》相關的同類信息!
  • 本頁收集關于SQLServer 批量插入數據的兩種方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久66热偷产精品| 美女视频黄 久久| 一区二区在线免费| 国产精品一二二区| 日韩免费视频一区二区| 亚洲天堂2014| 色狠狠综合天天综合综合| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩电影在线一区二区三区| 日韩一区二区三区精品视频| 国产又黄又大久久| 中文字幕永久在线不卡| 欧美天堂一区二区三区| 日本成人在线一区| 国产欧美日本一区二区三区| 91老师片黄在线观看| 亚洲第一狼人社区| 2021久久国产精品不只是精品| 粉嫩高潮美女一区二区三区| 一区二区三区色| 日韩精品一区二区三区在线| hitomi一区二区三区精品| 亚洲人成影院在线观看| 日韩一区二区三区在线视频| 国产成人综合亚洲91猫咪| 亚洲精品久久久蜜桃| 日韩视频一区二区三区| 成人免费观看男女羞羞视频| 午夜精品福利一区二区三区蜜桃| 日韩欧美一级二级三级| 欧美做爰猛烈大尺度电影无法无天| 奇米精品一区二区三区在线观看一| 久久久电影一区二区三区| 欧美私人免费视频| zzijzzij亚洲日本少妇熟睡| 免费成人av在线播放| 亚洲男人的天堂在线观看| 久久无码av三级| 欧美日韩精品系列| 成人福利视频网站| 久久成人av少妇免费| 一区二区三区在线观看视频| 日韩女同互慰一区二区| 色视频成人在线观看免| 国产福利91精品一区二区三区| 日韩精品免费专区| 一区二区三区四区在线免费观看| 日韩一区二区在线免费观看| 欧美午夜精品免费| 91视频一区二区三区| 成熟亚洲日本毛茸茸凸凹| 美女视频黄免费的久久| 男女男精品视频网| 人禽交欧美网站| 午夜精品久久久久久久蜜桃app| 亚洲欧美国产77777| 国产丝袜欧美中文另类| 欧美成人一区二区三区片免费| 在线观看视频欧美| 色综合久久综合网97色综合| av亚洲精华国产精华精| av一区二区三区黑人| av爱爱亚洲一区| 成人黄色777网| av不卡在线观看| 91成人免费在线| 精品视频123区在线观看| 欧美视频一区二区在线观看| 欧美视频在线观看一区二区| 欧美精品在线观看播放| 日韩一级成人av| 日韩情涩欧美日韩视频| 精品国产区一区| 国产午夜久久久久| 中文字幕制服丝袜一区二区三区 | 欧美高清在线一区二区| 日韩片之四级片| 久久综合狠狠综合久久综合88| 精品欧美一区二区久久| 国产午夜亚洲精品理论片色戒 | 在线看日韩精品电影| 成人av影院在线| 色综合久久88色综合天天免费| 在线精品视频免费观看| 7777女厕盗摄久久久| 精品少妇一区二区三区在线播放| 精品国产乱码久久久久久老虎| 久久女同精品一区二区| 欧美mv和日韩mv国产网站| 久久久久久99精品| 亚洲精品久久久蜜桃| 视频一区国产视频| 在线视频一区二区三区| 欧美嫩在线观看| 欧美一区二区性放荡片| 精品对白一区国产伦| 国产精品无人区| 日韩精品成人一区二区在线| 国产一区二区在线电影| av在线不卡观看免费观看| 欧美一区二区久久| 精品国产乱码久久久久久图片 | 另类小说视频一区二区| 国产美女av一区二区三区| 91在线视频在线| 欧美日韩色一区| 欧美激情艳妇裸体舞| 亚洲最新视频在线播放| 理论电影国产精品| 欧美日韩一级黄| 中文字幕一区二区日韩精品绯色| 激情综合五月婷婷| 在线不卡中文字幕播放| 亚洲视频一区在线观看| 精品一区二区三区欧美| 欧美日韩成人一区二区| 亚洲日本在线a| 日韩视频一区二区三区| 亚洲激情成人在线| 国产成人免费在线观看不卡| 色www精品视频在线观看| 精品日韩99亚洲| 亚洲一区二区黄色| 成人91在线观看| www欧美成人18+| 亚洲视频在线一区二区| 国产乱码字幕精品高清av | 欧美国产丝袜视频| 午夜精品久久久久久久99樱桃| 久久99热国产| 欧美日韩午夜影院| 国产精品传媒在线| 成人美女视频在线观看| 欧美一级xxx| 不卡一区中文字幕| 亚洲精品视频自拍| 国产成人精品影视| 日韩和的一区二区| 亚洲乱码精品一二三四区日韩在线| 一本大道综合伊人精品热热| 日韩亚洲欧美一区二区三区| 欧美电视剧在线看免费| 99国产精品久久久| 精品一区二区三区免费| 亚洲乱码中文字幕| 在线中文字幕一区二区| 欧美激情一区二区三区在线| 北条麻妃国产九九精品视频| 麻豆国产精品官网| 亚洲国产成人高清精品| 亚洲午夜国产一区99re久久| 久久久久国产精品免费免费搜索| 欧美日韩中文字幕一区| 日本高清不卡aⅴ免费网站| 成人晚上爱看视频| 国产91高潮流白浆在线麻豆| 国产成人精品一区二区三区网站观看 | 亚洲成av人**亚洲成av**| 亚洲国产sm捆绑调教视频 | 亚洲夂夂婷婷色拍ww47| 麻豆成人在线观看| 久久久精品国产免大香伊| 在线观看日韩精品| 不卡视频免费播放| 日本成人在线视频网站| 亚洲免费电影在线| 国产欧美日韩三级| 欧美卡1卡2卡| 91亚洲男人天堂| 免费观看一级欧美片| 亚洲自拍偷拍九九九| 欧美精品一区二区三区高清aⅴ | 欧美精品日韩精品| 成人一区二区视频| 国产一区日韩二区欧美三区| 青青草97国产精品免费观看无弹窗版| 中文字幕在线观看一区二区| 国产欧美日韩久久| 日韩免费一区二区三区在线播放| 欧美裸体一区二区三区| 国产91在线观看| 国产精品1024久久| 国产在线一区观看| 男人的j进女人的j一区| 亚洲视频香蕉人妖| 国产亚洲综合性久久久影院| 久久久久久久久久久99999| 日韩你懂的电影在线观看| 久久综合久久久久88| www国产亚洲精品久久麻豆| 日韩午夜精品电影| 欧美一级在线视频| 91精品国产欧美一区二区成人| 欧美一区二区在线免费播放| 欧美一区二区三区四区高清| 欧美一区二区三区日韩视频| 欧美一区二区精品| 日韩欧美激情一区| 国产免费成人在线视频| 国产精品美女久久久久久 |