原始表数据如下:
下一行的sid=上一行的sid+score
代码实现如下:
--定义游标(可以是动态,也可以是静态)
DECLARE my_cursor CURSOR STATIC LOCAL FOR
SELECT * FROM dbo.score ORDER BY id --依赖id排序
OPEN my_cursor
DECLARE @id TINYINT,
@sid INT,
@sidL INT, --声明上一行的sid
@score INT,
@scoreL INT,--声明上一行的score
@index INT=1 --声明index ,利用index变化找到上下行的值,设置为1
FETCH NEXT FROM my_cursor INTO @id,@sid,@score
WHILE @@FETCH_STATUS=0
BEGIN
SET @sidL=(SELECT sid FROM dbo.score WHERE id=@index)
SET @scoreL=(SELECT score FROM dbo.score WHERE id=@index)
SET @index=@index+1 --上一行查出来后,将index指向下一行
UPDATE dbo.score SET sid=@sidL+@scoreL WHERE id=@index --更新下一行
FETCH ABSOLUTE @index FROM my_cursor INTO @id,@sid,@score --游标调到下一行
END
CLOSE my_cursor
DEALLOCATE my_cursor
SELECT * FROM dbo.score
结果:
踩过的坑:
必须用select 查询历史值实现,不知道为什么,一开始使用动态游标用fetch next ,发现fetch next 读取不到update 后的sid,始终下一行sid 为空。