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 批量处理数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到插水稻什么寓意
- 下一篇: NSLog打印当前文件,当前函数,当前行