2.SqlBulkCopy是个不错的选择,直接由DataTable可以导入到数据库,但要注意(1)列名与目标表一致(2)数据类型一致(3)空值容错处理,参考代码:///summary///将see cref="DataTable"/
成都创新互联专业为企业提供嘉峪关网站建设、嘉峪关做网站、嘉峪关网站设计、嘉峪关网站制作等企业网站建设、网页设计与制作、嘉峪关企业网站模板建站服务,十余年嘉峪关做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
的数据批量插入到数据库中。////summary///param name="dataTable"
要批量插入的
see cref="DataTable"/。
/param///param name="batchSize"
每批次写入的数据量。
/parampublicboolInsertBatchDataTable(DataTable dataTable,
stringtableName,
intbatchSize =10000){using(SqlConnection connection =newSqlConnection(myConnectionString)){try{connection.Open();//给表名加上前后导符using(varbulk =newSqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity,
null){DestinationTableName=tableName,
BatchSize=batchSize}){//循环所有列,为bulk添加映射//dataTable.EachColumn(c = bulk.ColumnMappings.Add(c.ColumnName, c.ColumnName), c = !c.AutoIncrement);foreach(DataColumn dcindataTable.Columns){bulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);}bulk.WriteToServer(dataTable);
bulk.Close();}returntrue;}catch(Exception exp){returnfalse;}finally{connection.Close();}}}
3.如果是数据量非常大,超过10W以上的数据,可以考虑生成.dtsx文件,然后由C#代码直接调用,效率还是不错的。
用一次性删除的方法是很不明智的。
1、delete操作会被完整记录到日志里,它需要大量空间和时间;
2、如果删除中间发生中断,一切删除会回滚(在一个事务里);
3、同时删除多行,记录上的锁也许会被提升为排它表锁,从而阻碍操作完成之前有对这个表的操作(有时候会妨碍正常的业务)所以一般采取分批删除的方法.
所以我们可以通过分批次迁移压缩数据,这样可以大大提升执行速度和执行效率
首先通过set rowcount 来控制每次删除的记录数
执行Sql语句
SET ROWCOUNT 0; 记录每次执行删除的条数
通过TOP的方法,并且使用循环
WHILE 1 = 1
BEGIN
DELETE TOP(5000) FROM dbo.Table WHERE time '2016-12-12';
IF @@rowcount 5000
BREAK;
END
先试一下这个(CCC和B表自己换一下)
select left(CCC, patindex('%金%金%',CCC))+ stuff(right(CCC,len(CCC)-patindex('%金%金%',CCC)),charindex('金',right(CCC,len(CCC)-patindex('%金%金%',CCC))),1,'铜') From B表 Where patindex('%金%金%',CCC)0
如果能正常检索出结果,那就可以直接写
update B表 set CCC=(
left(CCC, patindex('%金%金%',CCC))+ stuff(right(CCC,len(CCC)-patindex('%金%
金%',CCC)),charindex('金',right(CCC,len(CCC)-patindex('%金%金%',CCC))),1,'铜
')) Where patindex('%金%金%',CCC)0