sql serve可以使用分段事务,更新50万数据改为分批更新的话,就可以了。
当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。
SET XACT_ABORT OFF
begin transaction t1 --开始一个事务t1
update a set x=1 where x is null --更新为值1
save transaction t2 --保存事务点t2
update b set y=2 where y is null --更新为值2
if @@error<>0 --判断有无错误
rollback transaction t2 --如果有,回滚到事务点t2
commit transaction t1 --提交事务t1
楼主可以看下SQL 分段事务。
这个跟你的提交方式和数据库有关系,mssql 批量保存只能回滚那一批的,比如一批提交100条。
oracle 批量保存的就不能回滚了。
拼sql的就只能回滚拼的那些记录了,大批量一般也不会用拼sql的方式。
楼主你太狠了。
你一次性更新50W条。。不卡么