• 游标 cursor 分批更新表记录&&while


    server sql  400W的表,批量更新

    while 更新比游标快

    declare @rt int 
    set @rt=625867
    while @rt<1458873
    BEGIn
         
        update  a
    	set DEAL=b.DEAL,mtime='2021-03-13 09:30:46.987'
        from  pgenius..STk_MKT a WITH(NOLOCK)
       join   s37.ginagao.dbo.STK_MKT_DEAL2019 b WITH(NOLOCK)
       on a.TRADEDATE=b.TRADEDATE and a.SecCode=b.STOCKCODE
       where a.ISVALID=1 and a.DEAL is null 
       and b.rt>=@rt and b.rt<=@rt+10000
    
       set  @rt=@rt+10000
    END
    

      

    ---有BUG,有空再改
    declare @SecCode varchar(12) declare @sql_cmd varchar(2000) declare sp cursor for select SecCode from #STK_MKT_tmp where SecCode=SecCode open sp fetch next from sp into @SecCode while(@@fetch_status=0) BEGIn set @sql_cmd= 'update a set DEAL=b.DEAL,mtime='+'''2021-03-11 10:56:46.987'''+ ' from cgenius..STK_MKT a left join s7.ginagao.dbo.STK_MKT_DEAL b on a.tradedate=b.TRADEDATE and a.SecCode=b.STOCKCODE where a.DEAL is null and ISVALID=1 and a.SecCode='+@SecCode exec ( @sql_cmd) fetch next from sp into @SecCode END close sp deallocate sp

    while 

     declare @a int,@b int
     set @a=1 
     while @a<22068549
     begin
         set @b=@a+1000
         insert into [tranconf_pp](S_TABNAME,PROCNAME,PARAM,UPDATEFIELD)
         select   'INDX_CLOSE_WEIGHT','DP_INDX_CLOSE_WEIGHT_2_C_INDX_CLOSE_WEIGHT',SEQ,''
        FROM DATAPOOL..INDX_CLOSE_WEIGHT with (nolock)
        where seq between @a and @b
        set @a=@b+1
        --- waitfor delay '00:03:00'
         truncate table  tranconf_pp 
     end
    

      

    update  backupdb..tempxwj_61
    set  sort =b.id
    from  backupdb..tempxwj_61 a join (
    select ROW_NUMBER() over (order by enddate,inner_code ) as id,
    inner_code,enddate from  backupdb..tempxwj_61) b 
    on a.enddate=b.enddate and a.inner_code=b.inner_code
    
    
     declare @sumcount int
     set @sumcount=(select count(1) from backupdb..tempxwj_61)
    
     declare @flag int
     set @flag=1
     declare @inner_code int,@PDATE datetime
     while @flag<=@sumcount
     begin 
       select @inner_code=inner_code,@PDATE=enddate
       from backupdb..tempxwj_61 
       where sort=@flag 
       begin try   
        EXEC ANA_FND_MKT_DAY_main @inner_code,@PDATE,1
        update backupdb..tempxwj_61  set done=1 where sort=@flag
       end try
       begin catch
        update backupdb..tempxwj_61  set done=2 where sort=@flag
       end catch 
    
       set @flag=@flag+1 
     end
    

      

  • 相关阅读:
    Java锁---偏向锁、轻量级锁、自旋锁、重量级锁
    Java自旋锁
    设计模式的原则
    CGLIB介绍与原理(通过继承的动态代理)
    Android Messenger
    Android AIDL的用法
    长连接和短连接和推送
    Java对称加密算法
    Android 热修复技术中的CLASS_ISPREVERIFIED问题
    Java类加载器
  • 原文地址:https://www.cnblogs.com/gina11/p/14517006.html
Copyright © 2020-2023  润新知