Pages - Menu

2018年12月7日 星期五

[MS SQL]While loop 取代Cursor

先說結論:
我跟我同事 他寫cursor 我寫while loop,
執行速度其實差不多。
但while loop比較短而已。
以下繼續



本文參考  iT邦幫忙
重點有兩個
1.宣告temp table,塞資料時要有row_number
2.用while 時,將row_number取出,設定最大、最小值

declare @t table
( RowNo int,    [VCH_DT] [smalldatetime] NOT NULL)
declare @max bigint
declare @min bigint
declare @key_vch_dt smalldatetime

insert into @t 
select ROW_NUMBER() over(order by CONVERT(varchar(100),vch_dt, 111))  as RowNo,
vch_dt from aaa
  --select * from @t
select @max=max(RowNo),@min=min(RowNo) from @t
while(@min<=@max)
     begin
         print @min
         print @max
         select @key_vch_dt=VCH_DT from @t where RowNo=@min       
        select @sum= sum(dbo.nprc_dt(item_no,@key_vch_dt)*dbo.nitem_qty_dt(item_no,@key_vch_dt))
         from bbb
        update @t set [amt_max]=  @sum where RowNo=@min
        set @min+=1
     end
select * from @t

沒有留言:

張貼留言