游标的使用
1、游标是什么:
个人理解:游标相当于数据表中的一个指针,它可以一行一行的去读你的表中的数据
2、如何使用游标:
游标的使用分为五个步骤:定义游标、打开游标、使用游标、关闭游标、释放游标;
1)定义游标:定义了一个名叫test_Cursor ,将表的所有列数据赋值给了他
1 DECLARE test_Cursor CURSOR FOR SELECT * FROM dbo.tb
2)打开游标:
1 OPEN test_Cursor
3)使用游标:就通过INTO关键字将这行的值传入局部变量,并打印出来
4)关闭游标
1 CLOSE test_Cursor
5)释放游标
1 DEALLOCATE test_Cursor
3、项目中的实际运用
1 --声明变量 2 DECLARE @instanceId uniqueidentifier,@createuserId nvarchar(50),@stateName nvarchar(50) 3 --声明游标 4 declare curr cursor for 5 --将数据库中的表查询过滤,游标就在这个过滤的表上作用 6 select id,CreaterUserId,StateName from WF_WorkflowInstance 7 where WorkflowName= '集团公司网上审批工作流' 8 and year(PersistTime) in (2016,2017) 9 10 --打开游标 11 open curr 12 --取游标中的数据,并存在临时变量中 13 fetch next from curr into @instanceId,@createuserId,@stateName 14 --循环条件,游标一般都是用这个条件,相当于取到没有数据就停了吧,你也可以自定义条件 15 while (@@fetch_status=0) 16 begin 17 if(@stateName = 'ApprovalEnd') 18 --这里是执行了其它的存储过程,主要写你逻辑吧 19 EXEC [EaScoreByEventParam] @instanceId ,'立项' ,@createuserId 20 if(@stateName = 'ApprovalTerminated') 21 EXEC [EaScoreByEventParam] @instanceId ,'中止' ,@createuserId 22 --这句话很关键,相当于循环的条件,取下一条数据,不写就会出现死循环 23 fetch next from curr into @instanceId,@createuserId,@stateName 24 end 25 close curr--关闭游标 26 27 deallocate curr --释放游标