あなたが元気であることを願っています。SQL Server クエリに問題があります。
534,000 行のテーブルのレコードを更新したいと考えています。すべてのレコードを更新するためのwhileループを作成すると、時間がかかります。
次に、更新レコードのカーソルを作成する必要があります。この後、Fetch を使用して更新用のカーソルを作成します。このカーソルは10,000行で更新プロセスをすばやく完了しますが、30,000行を超えるテーブルを使用すると、クエリの実行に5分かかります。何が問題なのかわからない。
その私のコード
DECLARE @RNo INT --Declaring the Variable @id
DECLARE @id INT --Declaring the Variable @id
set @RNo=1
DECLARE @MyCursor CURSOR -- Declaring the Cursor
SET @MyCursor = CURSOR --Assigning the cursor
FOR
SELECT Col1 FROM MyTable --Query related to Cursor
for update of Col2
OPEN @MyCursor -- Opening the Created cursor
FETCH NEXT FROM @MyCursor --Retrieving the record one by one
INTO @id --Assigning the value in declared Variable
WHILE @@FETCH_STATUS = 0
BEGIN
update MyTable
set Col2=@RNo
where current of @MyCursor
set @RNo=@rno+1
print @id
FETCH NEXT
FROM @MyCursor INTO @id
END
CLOSE @MyCursor -- Closing the Cursor
DEALLOCATE @MyCursor -- Deallocating the Cursor Memory
注: 私のクエリは正しいデータで実行されますが、問題は 5 分かかることです。このクエリを 10 秒以内に実行したいだけです。
前もって感謝します