Eri*_*ker 18 sql t-sql sql-server-2008
是否可以在SQL Update语句中添加TOP或某种分页?
我有一个UPDATE查询,结果是这样的:
UPDATE XXX SET XXX.YYY = #TempTable.ZZZ
FROM XXX
INNER JOIN (SELECT SomeFields ... ) #TempTable ON XXX.SomeId=#TempTable.SomeId
WHERE SomeConditions
Run Code Online (Sandbox Code Playgroud)
此更新将影响数百万条记录,我需要批量执行此操作.像当时的100.000(排序无关紧要)
最简单的方法是什么?
Eri*_*lje 20
是的,我相信您可以在更新声明中使用TOP,如下所示:
UPDATE TOP (10000) XXX SET XXX.YYY = #TempTable.ZZZ
FROM XXX
INNER JOIN (SELECT SomeFields ... ) #TempTable ON XXX.SomeId=#TempTable.SomeId
WHERE SomeConditions
Run Code Online (Sandbox Code Playgroud)
您可以使用SET ROWCOUNT { number | @number_var }它来限制在停止特定查询之前处理的行数,例如:
SET ROWCOUNT 10000 -- define maximum updated rows at once
UPDATE XXX SET
XXX.YYY = #TempTable.ZZZ
FROM XXX
INNER JOIN (SELECT SomeFields ... ) #TempTable ON XXX.SomeId = #TempTable.SomeId
WHERE XXX.YYY <> #TempTable.ZZZ and OtherConditions
-- don't forget about bellow
-- after everything is updated
SET ROWCOUNT 0
Run Code Online (Sandbox Code Playgroud)
我添加了XXX.YYY <> #TempTable.ZZZto where子句以确保您不会更新两次已更新的值.
设置ROWCOUNT到0 关闭的限制-不要忘记它.