日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlserver 批量处理数据

發布時間:2023/11/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlserver 批量处理数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前我覺得有兩種方法可以用作批量數據的處理,也算比較靠譜的吧:sqlbulkcopy 和利用表值函數。

1.sqlbulkcopy是dotnet中的一個用來處理大批量插入數據的,具體用法如下:

using (SqlConnection conSave = new SqlConnection(Config.RefStatWriteConnectString))
?? ??? ??? ?{

?? ??? ??? ??? ?conSave.Open();
?? ??? ??? ??? ?//conSave.CommandTimeout = Config.SqlExpireTime;
?? ??? ??? ??? ?System.Data.SqlClient.SqlBulkCopy sqlBC = new System.Data.SqlClient.SqlBulkCopy(conSave);

?? ??? ??? ??? ?sqlBC.BatchSize = 100000;
?? ??? ??? ??? ?//sqlBC.
?? ??? ??? ??? ?sqlBC.BulkCopyTimeout = Config.SqlExpireTime;
?? ??? ??? ??? ?sqlBC.DestinationTableName = "dbo.weblog";
?? ??? ??? ??? ?sqlBC.ColumnMappings.Add("ref", "ref");
?? ??? ??? ??? ?sqlBC.ColumnMappings.Add("refcount", "refcount");
?? ??? ??? ??? ?sqlBC.ColumnMappings.Add("sourpv", "sourpv");
?? ??? ??? ??? ?sqlBC.WriteToServer(weblog);
?? ??? ??? ?}

以上只是大略的調用代碼。

2.利用表值函數和merge

創建表值函數:

create type? typeTest as table (id int)

表值函數作為參數的dotnet調用代碼

?ParameterName="@OrderRefDetailTable",
??????????????????????? TypeName="OrderRefDetailTable",
??????????????????????? SqlDbType=SqlDbType.Structured,
??????????????????????? Value=(read !=null?(object)read:dtOrderRef)

參數的值可以是 DataTable, IEnumerable<SqlDataRecord>, or DbDataReader

利用merge的好處就是效率會高一點,而且不但可以插入數據還可更新數據

merge t

using s on t.id=s.id

when matched then update t.test=s.test

when not matched then insert values(s.id,s.test)

?

?

轉載于:https://www.cnblogs.com/hacker012/archive/2013/03/06/2945559.html

總結

以上是生活随笔為你收集整理的sqlserver 批量处理数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。