SQL Server游标介绍

SQL Server游标介绍

建立游标

+展开
-SQL
declare cursor1 cursor

for select * from student


打开游标

+展开
-SQL
open cursor1


读取游标

+展开
-SQL
fetch next from cursor1


关闭游标

+展开
-SQL
close cursor1


删除游标

+展开
-SQL
deallocate cursor1


例:对student使用游标进行操作

+展开
-SQL
declare cursor1 cursor        /*定义游标*/
for select * from student      /*游标操作的表*/
open cursor1                       /*打开游标*/
fetch next from cursor1       /*读出一条游标*/
while @@fetch_status=0    /*使用函数@@fetch_status函数报告上一个fetch语句的状态*/
begin                     
fetch next from cursor1       /*读取一条游标*/
end
close cursor1                     /*关闭游标*/
deallocate cursor1             /*删除游标*/


fetch into 将从游标取得的值存入字符型变量

+展开
-SQL
fetch next from cursor1 into @name


例:

+展开
-SQL
declare @name char(50)
declare cursor1 cursor    /*定义游标*/
for select 姓名 from student /*游标操作的表*/
open cursor1              /*打开游标*/
fetch next from cursor1 into @name   /*读出一条游标*/
while @@fetch_status=0    /*使用函数@@fetch_status函数报告上一个fetch语句的状态*/
begin
print'名字:'+@name                     
fetch next from cursor1 into @name   /*读取一条游标*/
end
close cursor1             /*关闭游标*/
deallocate cursor1        /*删除游标*/


创建scroll(滚动)游标,使其通过Last、Prior、Relative和Absolute选项支持全部滚动功能

+展开
-SQL
declare cursor1 scroll cursor for /*定义scroll(滚动)游标*/
select * from student
open cursor1                     /*打开游标*/
fetch last from cursor1          /*游标移动到游标头开始的最后一行并得到记录*/
fetch prior from cursor1         /*游标移动到当前行的上一条记录并得到记录*/
fetch absolute 2 from cursor1    /*游标移动到游标头开始的第2行并得到记录*/
fetch relative 3 from cursor1    /*游标移动到当前行向下(后)数的第3行并得到记录*/
fetch relative -2 from cursor1   /*游标移动到当前行向上(前)数的第2行并得到记录*/
close cursor1                    /*关闭游标*/
deallocate cursor1               /*删除游标*/


全局游标的使用

  例:使用全局游标global 的例子,先建立一个存储过程opencursor1用于建立和打开游标,再建立一个存储过程readcursor1用于读取数据,因为该游标作用域在当前连接中是全局的。所以它可以分成两个存储过程来执行,一个建立游标并打开游标,一个读出游标内的数据。

+展开
-SQL
use wangjun
go
create procedure opencursor1 as
declare cursor1 cursor global for
select * from student
open cursor1;
go
create procedure readcursor1 as
fetch next from cursor1
while(@@fetch_status<>-1)
begin
fetch next from cursor1
end
go
exec opencursor1;
go
exec readcursor1;

close cursor1
go
deallocate cursor1


局部游标的示例

+展开
-SQL
create procedure cursor_local --建立存储过程cursor_local
@outcursor cursor varying output --局部游标做为输出变量
as
set @outcursor = cursor for     --建立局部游标
select * from student
open @outcursor                --打开局部游标
go

declare @cursorvar cursor      --建立游标类型的变量
execute cursor_local @outcursor=@cursorvar output;    --游标类型变量得到了存储过程输出的游标

fetch next from @cursorvar     --开始从游标内读取数据
while @@fetch_status =0
begin
fetch next from @cursorvar
end

close @cursorvar              --关闭游标
deallocate @cursorvar         --删除游标


来源:http://2sws.blog.163.com/blog/static/1791024920098434542586/

加支付宝好友偷能量挖...


评论(0)网络
阅读(147)喜欢(0)SQL及数据库