我有一張包含大約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