sql 幾種循環方式


1:游標方式

復制代碼
ALTER PROCEDURE [dbo].[testpro]  
as

declare @yeardatestr varchar(20) --日期拼接
declare @meterno varchar(20) --儀表編號
declare @collectindataname varchar(30) --數據采集表
declare @collectindataname_back varchar(30) --數據采集備份表


declare @monsdt varchar(20)
declare @monedt varchar(20)

begin


    set @yeardatestr = datename(YY,getdate()) + datename(MM,getdate()) 

    
    set @monsdt=Convert(VarChar(4),DatePart(year,GETDATE()))+'-'+Convert(VarChar(2),DatePart(MONTH,DateAdd(MONTH,-2,GETDATE())))+'-01'
    set @monedt=CONVERT(VARCHAR(10),DateAdd(DAY,-1,DateAdd(MONTH,2,Convert(datetime,@monsdt,121))),20)
    
    declare meters_cur cursor local  fast_forward --定義游標
    for 
    select distinct MeterNo from MeterInfo
    open meters_cur --打開游標
    fetch next from meters_cur into @meterno--從游標中取出數據
    while @@fetch_status =0 --取出數據成功
    begin
    
        dbcc SHRINKFILE(testdb_log,0) --收縮日志 
        fetch next from meters_cur into @meterno--下一條
    end
    close meters_cur--關閉游標
    deallocate meters_cur--釋放游標

end
復制代碼

2:goto方式

復制代碼
    nextValue:--循環起點關鍵字
    select @num=ynum from pp_yunnum where prjsht=@prjsht

    IF(@flg=1)
        set @yunsht='K' + @prjsht + '-' + Convert(varchar(10),@num+1)
    ELSE
        set @yunsht=REPLACE(@prjsht,'_','') + '-' + dbo.Lpad(@num+1,2,'0')

    if exists (select 1 from pp_yun where pp_yun.sht=@yunsht)
    begin
        update pp_yunnum set ynum=ynum+1 where prjsht=@prjsht
        
        goto nextValue;--重新從nextValue出執行
    end
復制代碼
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM