SQL中的游标

什么叫游标(CURSOR)

一个游标(cursor)可以被看作指向结果集(a set of rows)中一行的指针(pointer)。
游标每个时间点只能指向一行,但是可以根据需要指向结果集中其他的行。
例如:SELECT * FROM employees WHERE sex=’M’会返回所有性别为男的雇员,在初始的时候,游标被放置在结果集中第一行的前面。
使游标指向第一行,要执行FETCH。当游标指向结果集中一行的时候,可以对这行数据进行加工处理,要想得到下一行数据,要继续执行FETCH。FETCH操作可以重复执行,直到完成结果集中的所有行。

什么时候使用游标?

简单的回答是需要对选出的结果集,进行遍历的时候,需要考虑使用游标。

当需要在存储过程中遍历所查得的结果集时用游标
1。在存储过程中,使游标,可以根据每条记录的某个字段的取值的不同,来采取相应的处理。这就是流程控制。
2. 游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。

游标的使用方法
declare @ID int
declare @Oid int
declare @Login varchar(50)

--定义一个游标 
declare user_cur cursor for select ID,Oid,[Login] from ST_User 
--打开游标 
open user_cur 
while @@fetch_status=0 请输入代码
begin
--读取游标 
    fetch next from user_cur into @ID,@Oid,@Login 
    print @ID 
    --print @Login 
end
close user_cur 
--摧毁游标 
deallocate user_cur
例子

创建一个存储过程使用游标 如果该职工入职时间超过3年 并且学历 在本科以上 则对该职工工资加10%如果 学历没达到本科的 入职时间在10年以上 同样对该职工工资追加8% 其他的一律不加

REATE proc jiagongzi
as
declare @name nvarchar(20)
declare @xueli nvarchar(20)
declare @time datetime
declare @gongzi intdeclare zengjia cursor scroll     
for
select * from 职员表
open zengjia
fetch next from zengjia into @name,@xueli,@time,@gongzi
while @@FETCH_STATUS=0
begin
 if (@xueli='本科' or @xueli='硕士') and DATEDIFF(year, @time, getdate())>=3
 begin
  update 职员表 set 工资=@gongzi+@gongzi*0.1 where 姓名=@name
 end
 if (@xueli<>'本科' and @xueli<>'硕士') and DATEDIFF(year, @time, getdate())>=10
 begin
  update 职员表 set 工资=@gongzi+@gongzi*0.08 where 姓名=@name
 end
 fetch next from zengjia into @name,@xueli,@time,@gongzi
end
close zengjia       
deallocate zengjia  goexec jiagongzi
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值