sqlserver 批量处理数据
目前我覺得有兩種方法可以用作批量數(shù)據(jù)的處理,也算比較靠譜的吧:sqlbulkcopy 和利用表值函數(shù)。
1.sqlbulkcopy是dotnet中的一個用來處理大批量插入數(shù)據(jù)的,具體用法如下:
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);
?? ??? ??? ?}
以上只是大略的調(diào)用代碼。
2.利用表值函數(shù)和merge
創(chuàng)建表值函數(shù):
create type? typeTest as table (id int)
表值函數(shù)作為參數(shù)的dotnet調(diào)用代碼
?ParameterName="@OrderRefDetailTable",
??????????????????????? TypeName="OrderRefDetailTable",
??????????????????????? SqlDbType=SqlDbType.Structured,
??????????????????????? Value=(read !=null?(object)read:dtOrderRef)
參數(shù)的值可以是 DataTable, IEnumerable<SqlDataRecord>, or DbDataReader
利用merge的好處就是效率會高一點,而且不但可以插入數(shù)據(jù)還可更新數(shù)據(jù)
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)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/hacker012/archive/2013/03/06/2945559.html
總結(jié)
以上是生活随笔為你收集整理的sqlserver 批量处理数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到插水稻什么寓意
- 下一篇: NSLog打印当前文件,当前函数,当前行