当前位置: 代码迷 >> Sql Server >> 游标update表1700W行数据耗时四个小时还在执行
  详细解决方案

游标update表1700W行数据耗时四个小时还在执行

热度:13   发布时间:2016-04-27 11:56:40.0
游标update表1700W行数据耗时4个小时还在执行
CREATE PROCEDURE proc_update AS
begin
declare cur_update cursor dynamic for select * from customer_cmb 
open cur_update 
  fetch first from cur_update
   
while @@fetch_status=0
begin

update customer_cmb set age = (case
when substring(id,7,4)like '%[a-zA-Z]%' then '0'
when len(id)=18 then year(getdate())-substring(id,7,4)
when len(id)=15 then year(getdate())-('19'+substring(id,7,2))
else '0'
 
end ) where current of cur_update
  fetch next from cur_update
  end
close cur_update
deallocate cur_update
end

存储过程中使用了游标,数据库是 sql2000, win7系统,问题RT。。。
望各位达人们帮帮忙...

------解决方案--------------------
更新这么大的数据量 数据会锁表的
即便不用游标也会花费大量的时间。切忌在生产环境中执行。

分批次执行更新吧
------解决方案--------------------
SQL code
直接执行不行吗:update customer_cmb set age = (casewhen substring(id,7,4)like '%[a-zA-Z]%' then '0'when len(id)=18 then year(getdate())-substring(id,7,4)when len(id)=15 then year(getdate())-('19'+substring(id,7,2))else '0'  end )
  相关解决方案