首页 新闻 会员 周边

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

0
[已解决问题] 解决于 2022-09-19 17:37

表结构:
create table TestTb(
[MenuId] [int] NOT NULL PRIMARY KEY IDENTITY(1,1),
[MenuName] varchar NOT NULL,
[MenuLevel] varchar NOT NULL,
[FormName] varchar 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进行更新数据,每一行里面的MenuLevel 前面加10,达到一个排序的效果。

自在猫先生的主页 自在猫先生 | 菜鸟二级 | 园豆:204
提问于:2022-09-19 15:22
< >
分享
最佳答案
0

你的第二个FETCH NEXT FROM Up INTO @MenuId,@MenuLevel;要放在while循环里,end的上面;不然一直在第一行循环,无法结束。

奖励园豆:5
foreversag | 菜鸟二级 |园豆:267 | 2022-09-19 16:40

放在循环里面了,但是那个 MenuLevel 这个值更新一直都是0,我已知是 第一个功能的序号10 他的子功能序号就应该在前面加10,第二个功能就是20,子功能序号就是前面加20,依次类推这样每个功能的序号就能对上了。我想要达到这样的效果,大佬请问我应该调整那个位置。

自在猫先生 | 园豆:204 (菜鸟二级) | 2022-09-19 16:45

@自在猫先生:
是这样么?把if @MenuLevel <>''删了就行

foreversag | 园豆:267 (菜鸟二级) | 2022-09-19 16:53

@foreversag: 现在可以了 更新成功了,我在想要实现后续的子功能更新,这个是他的父级。我已知是 第一个功能的序号10 他的子功能序号就应该在前面加10,第二个功能就是20,子功能序号就是前面加20,依次类推这样每个功能的序号就能对上了。我想要达到这样的效果,大佬请问我应该调整那个位置。

自在猫先生 | 园豆:204 (菜鸟二级) | 2022-09-19 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册