SQL Server游标介绍
SQL Server游标介绍
建立游标
打开游标
读取游标
关闭游标
删除游标
例:对student使用游标进行操作
fetch into 将从游标取得的值存入字符型变量
例:
创建scroll(滚动)游标,使其通过Last、Prior、Relative和Absolute选项支持全部滚动功能
全局游标的使用
例:使用全局游标global 的例子,先建立一个存储过程opencursor1用于建立和打开游标,再建立一个存储过程readcursor1用于读取数据,因为该游标作用域在当前连接中是全局的。所以它可以分成两个存储过程来执行,一个建立游标并打开游标,一个读出游标内的数据。
局部游标的示例
来源:http://2sws.blog.163.com/blog/static/1791024920098434542586/
建立游标
+展开
-SQL
declare cursor1 cursor
for select * from student
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 /*删除游标*/
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 /*删除游标*/
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 /*删除游标*/
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
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 --删除游标
@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/
加支付宝好友偷能量挖...