Как я могу создать цикл в операторе UPDATE, который работает до тех пор, пока не останется строки для обновления? - PullRequest
5 голосов
/ 29 декабря 2011

Предположим, у меня есть тысячи строк для обновления.

И я планирую делать обновление итеративно; обновляя только 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 Ответ

8 голосов
/ 29 декабря 2011

Попробуйте этот цикл

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 имеет значение null или нет, если нет - тогда ISNULL не требуется

Когда строк с IsVegetable <> 1 не останется - цикл завершится, потому что @@ ROWCOUNT будет = 0 или <1000 (для последней итерации) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...