自在猫先生 2022-09-19 10:57 采纳率: 66.7%
浏览 24
已结题

SQL SERVER 使用游标更新数据遇到无法循环更新

问题遇到的现象和发生背景

我编写了一个游标进行更新数据,发现无法更新重复更新第一行数据。

用代码块功能插入代码,请勿粘贴截图
表结构:
 create table TestTb(
    [MenuId] [int] NOT NULL PRIMARY KEY IDENTITY(1,1),
    [MenuName] [varchar](40) NOT NULL,
    [MenuLevel] [varchar](20) NOT NULL,
    [FormName] [varchar](40) NOT NULL
    )
GO
新增语句:
 INSERT INTO TestTb VALUES('基础数据','','')
 INSERT INTO TestTb VALUES('系统管理','','')
 INSERT INTO TestTb VALUES('合格证式样维护','','')
 INSERT INTO TestTb VALUES('COC一致性证书式样维护','','')
 INSERT INTO TestTb VALUES('环保随车清单维护','','')
 INSERT INTO TestTb VALUES('合格证打印','','')
 INSERT INTO TestTb VALUES('COC一致性证书打印','','')
 INSERT INTO TestTb VALUES('环保随车清单打印','','')
 INSERT INTO TestTb VALUES('OBD和尾气信息','','')
 INSERT INTO TestTb VALUES('综合查询','','')
游标更新:
declare @MenuLevel nvarchar(100)
declare @MenuId NVARCHAR(100)
declare @NuM INT=0
declare Up CURSOR for (select MenuId,MenuLevel from TestTb )
open Up
FETCH NEXT FROM Up INTO @MenuId ,@MenuLevel
 WHILE @@FETCH_STATUS = 0
 begin
 if @MenuLevel <>''
 set @NuM =@NuM+10;
 select cast (@NuM as nvarchar(100))
 update TestTb set MenuLevel=@NuM where MenuId=@MenuId
 PRINT @MenuId+'  '+@MenuLevel;
 end
 FETCH NEXT FROM Up INTO @MenuId,@MenuLevel;
 CLOSE Up; --关闭游标
 DEALLOCATE Up; --释
 --select * from TestTb

运行结果及报错内容

每次重复更新第一行数据

我的解答思路和尝试过的方法

根据id进行更新数据

我想要达到的结果

根据id进行更新数据,每一行里面的MenuLevel 前面加10,达到一个排序的效果。

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 11月2日
      • 创建了问题 9月19日

      悬赏问题

      • ¥15 数组并求平均数及各值与平均数之差
      • ¥15 Qt5.9.9+Vs2017遇到字符集问题
      • ¥25 win11无法启用windows功能
      • ¥15 spm-cat进行VBM分析出错
      • ¥50 c++dll中,在函数中创建线程,在函数执行完之后,线程也被销毁了,有什么办法可以让线程持续运行?
      • ¥15 微信小程序真机测试报错空白
      • ¥15 急需帮助!!!非常需要帮助
      • ¥15 idea运行后磁盘爆满
      • ¥15 matlab的编程题。。。。。。。。
      • ¥300 数字n拆分为m个数字之和的组合问题