当前位置: 首页 > 面试题库 >

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

公羊招
2023-03-14
问题内容

假设我有数千行要更新。

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

问题答案:

试试这个循环

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 <> 1-循环将退出,因为@@ ROWCOUNT将等于0或<1000(对于最后一次迭代)



 类似资料: