您的位置:首页 > 数据库

SQLSERVER 游标使用简单示例

2017-07-26 14:20 429 查看
原理:如下图所示,MenuID为游标处理集合,指针每次往下移动一个格子,6条数据就会执行移动6次



需求:现菜单表tbl_Admin_Menu中的排序SeqNumber是乱的,我们需要将排序从1开始重新排序

实现:

--游标更新顶级菜单排序
declare @this_menuid int,@seqnumber int=1 --定义参数@this_menuid,用于记录当前指标指向的菜单ID;参数@seqnumber,并初始化值等于1
declare Cursor_Order_Update cursor for --创建游标Cursor_Order_Update
select menuid from tbl_Admin_Menu where ParentID=0 order by SeqNumber --待处理的游标集合,菜单ID menuid
open Cursor_Order_Update --开始游标
fetch next from Cursor_Order_Update --指针下移
into @this_menuid --获取当前指针指向的菜单ID
while @@FETCH_STATUS=0 --0代表未执行结束
begin

update tbl_Admin_Menu set SeqNumber=@seqnumber where MenuID=@this_menuid --根据当前指向的菜单ID,查询出当前行,并将SeaNumber更新
set @seqnumber=@seqnumber+1 --排序自动+1

fetch next from Cursor_Order_Update ----指针下移
into @this_menuid --获取当前指针指向的菜单ID
end
close Cursor_Order_Update--关闭游标
deallocate Cursor_Order_Update--释放游标

go
--其它说明:游标执行时,可指定多个字段,代码如下
declare @this_menuid int,@this_menuname varchar(100),@seqnumber int=0
declare Cursor_Order_Update cursor for
select menuid,menuname from tbl_Admin_Menu where ParentID=0 order by SeqNumber
open Cursor_Order_Update
fetch next from Cursor_Order_Update
into @this_menuid,@this_menuname
while @@FETCH_STATUS=0
begin

print @this_menuid
print @this_menuname

fetch next from Cursor_Order_Update
into @this_menuid,@this_menuname
end
close Cursor_Order_Update
deallocate Cursor_Order_Update

go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: