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

pen*_*ake 5 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

Ole*_*Dok 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
Run Code Online (Sandbox Code Playgroud)

为什么ISNULL - 因为它不清楚 - 如果字段IsVegetable是否可以为空,如果不是 - 则不需要ISNULL

当IsVegetable <> 1没有任何行时 - 循环将退出,因为@@ ROWCOUNT将是= 0或<1000(对于最后一次迭代)