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