我有一张包含大约10万条记录的表。我想在1000块如下更新while循环中的表:在SQL的WHILE循环中运行UPDATE语句需要永久运行
DECLARE @totalRecordCount INT
DECLARE @midCount INT
DECLARE @Chunksize INT
set @totalRecordCount = (SELECT COUNT(*) FROM Tabletemp)
set @ChunkSize = CEILING(@totalRecordCount/1000)+1 -- Divide the total into 1000 chunks
set @midcount = @totalRecordcount
while @midcount > 0
BEGIN
UPDATE top(@Chunksize) a
set a.x = b.x
FROM TableTemp a
INNER JOIN
TableTemp2 b on a.id = b.id
WHERE a.x is Null
SET @[email protected]@ROWCOUNT
END
我试图把一个SELECT语句前@@ ROWCOUNT看才能到达那里多少时间,但查询保持运行永远。当我用相应的@Chunksize运行单个更新语句时,它会在最大13秒内运行,但是在循环中它会一直运行。
我也用SELECT替换了UPDATE,看看循环是否正常运行,并发现它工作正常。
没有得到为什么UPDATE永远需要运行,请大家帮忙!
你使用的是哪个版本的sql server? – PRABA
您的查询不是分块的结果。它正在做一个非常大的更新。 –
当你开始时,@midcount被初始化了吗?另外,正如戈登已经提到的更新一次完成,没有在你的代码中分块 – GuidoG