假设我有数千行需要更新。
我计划迭代地进行更新;通过每次迭代仅更新1000行。
我想迭代,直到没有行要更新。
如果没有要更新的行,我该如何运行下面的T-SQL脚本?
-- TODO: Create a loop so that it exists when there is no ROW left to be updated;
-- how can I do it?
UPDATE tableToUpdate
SET IsVegetable = 1
WHERE Id IN
(SELECT TOP 1000 Id
FROM tableToUpdate
WHERE Date = '2011-07-23 14:00')
-- Loop ends
答案 0 :(得分:8)
试试这个循环
while 1 = 1
BEGIN
UPDATE top (1000) tableToUpdate
SET IsVegetable = 1
WHERE
Date = '2011-07-23 14:00'
AND IsNull(IsVegetable, 0) = 0
if @@ROWCOUNT < 1000 BREAK
END
为什么 ISNULL - 因为不清楚 - 如果字段IsVegetable可以为空,如果不是 - 那么 ISNULL 则不需要
当IsVegetable&lt;&gt;不存在任何行时1 - 循环将退出,因为@@ ROWCOUNT将是= 0或&lt; 1000(最后一次迭代)