我如何在一个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或 |
|
|
|
|
|