Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在UPDATE语句上创建循环,直到没有行可更新为止?_Sql_Sql Server_Tsql_Dynamic Sql - Fatal编程技术网

Sql 如何在UPDATE语句上创建循环,直到没有行可更新为止?

Sql 如何在UPDATE语句上创建循环,直到没有行可更新为止?,sql,sql-server,tsql,dynamic-sql,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 (SELEC

假设我有数千行要更新

我计划迭代更新;每次迭代只更新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
当1=1时
开始
更新顶部(1000)表格更新
设置为1
哪里
日期='2011-07-23 14:00'
和IsNull(isplanet,0)=0
如果@@ROWCOUNT<1000,则中断
结束
为什么ISNULL-因为它不清楚-如果字段是可空的或不可空的,那么ISNULL就不需要了


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

为什么每次只更新最大1000行?在我看来,删除WHERE子句似乎可以解决你的问题。但是你明确地说你想一次做1000次,我只是想知道为什么?我举了一些数字作为例子,但原因是为了防止交易超时。第二个原因是:对实现的好奇。你能解释一下,你为什么需要这个:和IsNull(isplant,0)=0,你能解释一下确保循环工作到剩下0行的机制吗?@Oleg:谢谢你Oleg!看来我无法从WHILE语句中获得@ROWCOUNT值?