日期:2014-05-18  浏览次数:20934 次

help me, help me! 关于大数据COPY ,有谁了解 bluk insert
我想从表A COPY 一部分数据到本身(表A) 由于使用insert select 这样的方法效率太低, 
考虑使bluk insert ,但不知道bluk insert 表对表如何copy? 
从网上和帮助中查资料都是 文件到表copy的例子。 
.net里面有bluk copy方法使用bluk insert,但我通过sql profiler 跟踪出的SQL无法运行. 
很急,请高手帮忙!!!!

原贴 http://topic.csdn.net/u/20071021/23/52570daf-3d59-4eff-96e9-080e614ade4a.html

------解决方案--------------------
你可以试试sql2000的dts或sql2005的数据库复制
------解决方案--------------------
要是sqlserver数据库的话,2.0里增加了大数据表的操作方法,可以试试。
------解决方案--------------------
jf
------解决方案--------------------
这是我们项目里用到的SqlBulkCopy,截取一部分帮助你理解SqlBulkCopy的用法

/*******************调用SqlBulkCopy实现DataTable到SQL的批量拷贝******************/
if (SqlConn.State == ConnectionState.Closed)
{
SqlConn.Open();
}

//定义SQL事务并嵌入到批量拷贝的工作中
SqlTransaction objSqlTran = SqlConn.BeginTransaction();

//定义SqlBulkCopy:SqlConn为SqlConnection,SqlBulkCopyOptions枚举类型,objSqlTran为调用的事务
SqlBulkCopy objSqlCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, objSqlTran);

//分批次拷贝的行数
objSqlCopy.BatchSize = 10;
objSqlCopy.BulkCopyTimeout = 240;
//目标表名
objSqlCopy.DestinationTableName = "DetailAccountReport";

//源表对目标表字段的映射,因为默认是按顺序以及名字匹配,所以这步很重要
objSqlCopy.ColumnMappings.Add("ProjectDefID", "ProjectDefID");
objSqlCopy.ColumnMappings.Add("PrjName", "PrjName");
objSqlCopy.ColumnMappings.Add("MaterialCodeDef", "MaterialCodeDef");
objSqlCopy.ColumnMappings.Add("MaterialCode", "MaterialCode");
objSqlCopy.ColumnMappings.Add("MaterialName", "MaterialName");
objSqlCopy.ColumnMappings.Add("Spec", "Spec");
objSqlCopy.ColumnMappings.Add("UnitName", "UnitName");
objSqlCopy.ColumnMappings.Add("CreateDate", "CreateDate");
objSqlCopy.ColumnMappings.Add("BillTypeID", "BillTypeID");
objSqlCopy.ColumnMappings.Add("BillNum", "BillNum");
objSqlCopy.ColumnMappings.Add("BillID", "BillID");
objSqlCopy.ColumnMappings.Add("BillName", "BillName");
objSqlCopy.ColumnMappings.Add("AcceptNum", "AcceptNum");
objSqlCopy.ColumnMappings.Add("AcceptUnitPrice", "AcceptUnitPrice");
objSqlCopy.ColumnMappings.Add("AcceptMoney", "AcceptMoney");
objSqlCopy.ColumnMappings.Add("SellNum", "SellNum");
objSqlCopy.ColumnMappings.Add("SellUnitPrice", "SellUnitPrice");
objSqlCopy.ColumnMappings.Add("SellMoney", "SellMoney");
objSqlCopy.ColumnMappings.Add("Num", "SumNum");
objSqlCopy.ColumnMappings.Add("Money", "SumMoney");
objSqlCopy.ColumnMappings.Add("Explain", "Explain");

try
{
//将DataTabel类型的objDT作为源拷贝到目标表
objSqlCopy.WriteToServer(objDT);
objSqlTran.Commit();
}
catch
{
objSqlTran.Rollback();
}
finally
{
objSqlCopy.Close();