亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

百萬數據庫循環取值進行更新的算法

百萬數據庫循環取值進行更新的算法

手掌心 2018-12-07 02:19:01
begin Declare GuestCursor Cursor For Select top 88888 XLH,SL from CP_SSQ6_005 where xtbz='0' order by XLH asc; Open GuestCursor Fetch Next From GuestCursor into @V_XLH,@V_SL; WHILE @@FETCH_STATUS = 0 Begin update CP_SSQ6_005 set xtbz='1' where xlh=@V_XLH; set @V_SL=rtrim(ltrim(@V_SL)); set @V_1=substring(@V_SL,1,2); set @V_2=substring(@V_SL,3,2); set @V_3=substring(@V_SL,5,2); set @V_4=substring(@V_SL,7,2); set @V_5=substring(@V_SL,9,2); set @V_6=substring(@V_SL,11,2); Select @V_or=dbo.F_GetOrder_2_3(@V_SL) set @T_1=CAST(@V_1 AS decimal(18,0)) set @T_2=CAST(@V_2 AS decimal(18,0)) set @T_3=CAST(@V_3 AS decimal(18,0)) set @T_4=CAST(@V_4 AS decimal(18,0)) set @T_5=CAST(@V_5 AS decimal(18,0)) set @T_6=CAST(@V_6 AS decimal(18,0)) set @T_JE=@T_1+@T_2+@T_3+@T_4+@T_5+@T_6; if(@T_JE>=121) begin update CP_SSQ6_005 set scbz='1',xtbz='1' where xlh=@V_XLH; waitfor delay '00:00:00';-- end; Fetch Next From GuestCursor into @V_XLH,@V_SL; end Close GuestCursor DealLocate GuestCursorend ? 我有一個百萬數據庫,需要循環取值進行計算,現在是用游標每次只能取88888 條記錄,這樣很麻煩,有沒有百萬數據庫循環取值進行更新的算法
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

可以試下把判斷邏輯放到一個用戶函數中,然后批量更新值,如

update CP_SSQ6_005 set scbz='1',xtbz='1'

where dbo.fun(SL)>=121

查看完整回答
反對 回復 2019-01-07
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

為什么要用游標,直接循環就可以了,

update CP_SSQ6_005 set xtbz='1' where xlh=@V_XLH;

xlh是索引嗎?可以直接用物理的ID.
?update CP_SSQ6_005 set scbz='1',xtbz='1' where?

兩次更新xtbz='1' 為同樣的值?

?

@V_1?@T_1變量可以提出循環

查看完整回答
反對 回復 2019-01-07
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

不建議使用游標,嚴重影響效率

查看完整回答
反對 回復 2019-01-07
  • 3 回答
  • 0 關注
  • 632 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號