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

时间:2011-12-29 09:28:03

标签: sql sql-server tsql dynamic-sql

假设我有数千行需要更新。

我计划迭代地进行更新;通过每次迭代仅更新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

1 个答案:

答案 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(最后一次迭代)