SQL Server 通过游标更新数据

问题描述

数据表有几千万数据,需要就其中约百万数据进行更新,不能锁表。因此采用游标进行更新。

解决方案

-- 声明变量用以存储游标获得的数据
DECLARE @Id INT;
-- 声明游标
DECLARE IdCursor CURSOR FOR(SELECT id FROM my_table WHERE state = -2 ) FOR UPDATE OF state;
-- 打开游标
OPEN IdCursor;
-- 移动游标,加载数据
FETCH NEXT FROM IdCursor
	INTO @Id;
WHILE @@FETCH_STATUS = 0
BEGIN
  UPDATE my_table SET state=-1 WHERE id = @Id;
	-- 移动游标到下一条数据
	FETCH NEXT FROM IdCursor
		INTO @Id;
END;
CLOSE IdCursor;
DEALLOCATE IdCursor;

你可能感兴趣的:(数据库,sql,sqlserver,数据库)