SqlServer 游标逐行更新数据,根据上一行的数据来更新当前行

工做中用到的记录一下,游标的详细定义及说明请百度--游标格式化数据

DECLARE cursor_jxsmb CURSOR FOR --定义一个游标
SELECT F0 FROM dbo.JXSMB2019;	--定于游标的数据源
OPEN cursor_jxsmb	--打开游标

DECLARE @LAST NVARCHAR(4000),@THIS NVARCHAR(4000)	--定义两个变量,用来保存上一行和当前行的数据
FETCH NEXT FROM cursor_jxsmb INTO @THIS	--设置@this 为当前行的数据

WHILE @@FETCH_STATUS=0	--判断游标是否为读取失败,读取失败则为-1 表明最后一行
BEGIN
IF LEN(@THIS)<>0	--判断当前读取行字段是否为空
BEGIN
SET @LAST=@THIS	--若是不为空则不更新,而且设置@last为当前行的数据
--PRINT @LAST
END
ELSE
BEGIN	--若是为空则更新当前行的数据为上一行
UPDATE JXSMB2019 SET F0=@LAST WHERE CURRENT OF cursor_jxsmb	--更新数据,where 只更新当前游标所在行
--PRINT @LAST
END

FETCH NEXT FROM cursor_jxsmb INTO @THIS     --继续读取下一行数据

END

CLOSE cursor_jxsmb	--关闭游标
DEALLOCATE cursor_jxsmb	--释放游标