SQL 编程 游标

游标:游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制

游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通

游标种类:

Transact_SQL 游标

  由DECLARE CURSOR 语法定义主要用在Transact_SQL 脚本,存储过程和触发器中

API 游标

  支持在OLE DB ODBC 以及DB_library 中使用游标函数,主要用在服务器上。

客户游标

  主要是当在客户机上缓存结果集时才使用

使用游标:

 声明游标;

declare cursor_name

[insensitive] [scroll] cursor for select_statement [for {read only | update [ of column_name [ ,...n] ] }]

打开游标

open {cursor_name | cursor_variable_name}

提取数据

FETCH  [ [ NEXT | PRIOR | FIRST | LAST

         | ABSOLUTE { n | @nvar }

         | RELATIVE { n | @nvar }

       ]

 FROM

       ]

{  cursor_name | @cursor_variable_name }

[ INTO @variable_name [,...n ] ]

使用@@FETCH_STATUS全局变量判断数据提取状态

返回值是“0”表示FETCH语句成功,”-1“表示失败或此行不在结果中。”-2“表示被提取的行不存在

关闭游标:

CLOSE {  cursor_name

      cursor_variable_name }

在使用 CLOSE 语句关闭某游标后,系统并没有完全释放游标的资源,并且也没有改变游标的定义,当再次使用 OPEN 语句时可以重新打开此游标。
释放游标:

   DEALLOCATE {  cursor_name |   cursor_variable_name }

释放游标就释放了与该游标有关的一切资源,包括游标的声明,以后就不能再使用OPEN语句打开此游标了

使用set语句将游标复制给游标变量

 declare @cui_ta cursor                        /*声明游标变量*/

declare sc_curscroll cursor                        /*声明游标*/

for

select * from sc

set @cui_ta = sc_curscroll                         /*赋值*/

例子1:从学生表(student)中,声明一个姓”易“的学生的游标

declare sname_cursor cursor for

select sname from student

where sname like '易%'

order by sname

open sname_cursor

  /*提取第一行数据*/

fetch next from sname_cursor                             

while @@fetch_status = 0

begin

        .......处理从游标中提取的数据

        fetch next from sname_cursor

end

close sname_cursor

deallocate sname_cursor

go

例二:
declare @sname char(10),@sgrade smallint

declare stu_cursor cursor for

select sname,sno from student

open stu_cursor

fetch next from stu_cursor into @sname,@sgrade

while @@fetch_status = 0

begin

print 'sname:'+@sname+' sgrade'+cast(@sgrade as varchar(4))

fetch next from stu_cursor into @sname,@sgrade

end

close stu_cursor

deallocate stu_cursor

go

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gangtianyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值