回答

收藏

我如何在一个UPDATE语句上创建一个循环,直到没有剩余的行可更新为止?

技术问答 技术问答 245 人阅读 | 0 人回复 | 2023-09-13

假设我有数千行要更新。
, }; u1 h1 u: x2 t1 G$ O! H我计划迭代进行更新;通过每次迭代仅更新1000行。
* J0 i! p4 H) E! d- z5 c* z我想迭代直到没有行要更新为止。  H3 Z7 V* {% [# Y4 I$ ^) F
在没有行要更新之前,如何运行下面的T-SQL脚本?
) D5 l+ s2 i% m  \" F, W-- TODO: Create a loop so that it exists when there is no ROW left to be updated; 1 ]9 C; I- c( ~0 `
-- how can I do it?  n1 R# w9 x. L" }! b
UPDATE tableToUpdate5 d- V* L# }5 G% c% Y# S* g
SET IsVegetable = 1& m, r7 w5 C9 w1 `
WHERE Id IN$ T9 Q7 W1 i- {. Y/ ?
               (SELECT TOP 1000 Id
; _+ e9 b' z# H6 ^. y7 E. k                FROM tableToUpdate* W3 L: c7 ~" K) d0 K: \- g
                WHERE Date = '2011-07-23 14:00')
( T* ^! q* o: r+ H. L-- Loop ends
" S' f: q- a% U4 e; G" o               
  W' c: o- b  K/ U+ P+ u  X0 ?3 g解决方案:
  U9 q6 n! c' E                $ U* s2 U& Z) @8 ^
4 S* c$ _2 a  J( s8 ^
& l7 N1 o9 x. Y- H- R8 \' g! b
                试试这个循环& m1 c$ c. P4 {2 i
while 1 = 1
; j( R: f, o  Q" ?BEGIN: c( v' \, s1 `  f0 C: w. J% \. s
    UPDATE top (1000) tableToUpdate2 ]: z8 Q9 M7 ~3 g7 {
    SET IsVegetable = 1
! E/ {5 f% H; ~. S6 s/ |    WHERE
$ v! W; F; m4 i' r' I: J/ C        Date = '2011-07-23 14:00'1 h) ]3 F0 h  i
    AND IsNull(IsVegetable, 0) = 0' z5 G6 \" X6 \1 ?, v# v3 B
    if @@ROWCOUNT 为什么 ISNULL -因为它是不明确-如果字段IsVegetable为空或没有,如果没有-那么 ISNULL 不需要! T; _  G! R4 x7 Q: P; p  L
如果没有行,则IsVegetable  1-循环将退出,因为@@ ROWCOUNT将等于0或
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则