select * into destTbl from srcTblinsert into destTbl(fld1, fld2) selec t fld1, 5 from srcTbl以上两句都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的。第一句(select into from)要求目标表(destTbl)不存在 ,因为在插入时会自动创建。第二句(insert into select from)要求目标表(destTbl)存在 ,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量 ,如例中的:5。
按理单纯的insert操作会很快的
blukcopy,插入1w条数据1秒钟都不要
{
foreach (DataTable dt in ds.Tables)
{
insertSqlBulk.DestinationTableName = dt.TableName;
insertSqlBulk.WriteToServer(dt);
}
}
}
select into 和 insert into select 两种表复制语句
select * into destTbl from srcTblinsert into destTbl(fld1, fld2) selec t fld1, 5 from srcTbl以上两句都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的。第一句(select into from)要求目标表(destTbl)不存在 ,因为在插入时会自动创建。第二句(insert into select from)要求目标表(destTbl)存在 ,由于目标表已经存在,所以我们除了插入源表(srcTbl)的字段外,还可以插入常量 ,如例中的:5。
存储过程是已经在数据库中编译好了的,比程序中的代码快
Access中没有存储过程
批量插入是要有datatable的,你要产生新字段,不就是对一个datatalbe操作吗?加上新的column,产生后直接赋值给它,然后把整个datatable一把批量插入到数据库不就行了??sqlbulkcopy做批量插入时相当快的
插零时表,再批量写入正式表
bulkcopy是纯粹位了调高速度而设计的,也是基于数据操作的,linq是在数据库操作上进行的封装,怎么可能会快呢?linq2sql只是方便用c#编程操作数据库而已,既然有封装那么必然有性能损耗,sqlbulkcopy只能做insert操作,其他操作室不允许的,要追求速度就得足够简单,这是真理。
如果你有事务需求的话,我建议你把这些数据放到另外一个表中,在该表维护一个字段:flag(bit),然后你可以多次小批量处理,比如一次处理100条,方式数据处理成功了,再将flag字段置为1.那么这会避免大的事务,也会提高对大数据量处理的可控性。
不过用这样的方法来对付20w条数据,似乎有点杀鸡用牛刀了,我上天处理1300w条数据,就是这么干的。