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	--釋放遊標
相關文章
相關標籤/搜索