SQLSERVER 游标使用简单示例
原创
©著作权归作者所有:来自51CTO博客作者wx62d1485ecb778的原创作品,请联系作者获取转载授权,否则将追究法律责任
原理:如下图所示,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