1、使用英文单词cursor来表示游标,全局游标用global表示,局部游标用local表示。
2、局部游标
①一旦创建就可以在任何位置访问该游标。
②当不同过程不同函数需要访问和管理同一个结果集合的时候,需要创建全局游标。
3、局部游标
①全局游标只能在声明和创建的函数或存储过程中对它进行访问。
②局部游标管理起来更容易,其安全性相对较高。
4、SQL使用游标的步骤如下:
①声明游标
游标就是指向内存中结果集的指针,可以实现对内存中的结果集进行各种操作,操作完毕后才能将数据存放到硬盘上。
声明游标
declare cursor_name cursor
[local|global]
[forward_only|scroll]
[static|dynamic]
[read_only]
for
select_statement
[;]
cursor_name:定义服务器的游标名称
local:局部游标
global:全局游标
forward_only:指定游标只能从第一行滑动到最后一行
statiac:定义的是静态游标,一般默认的定义就是静态游标
dynamic:定义的是动态游标,动态游标不能使用绝对访问功能
read_only:禁止通过该游标进行更新
select_statement:定义游标结果集的标准select语句
例题:使用static关键字声明全局游标cEmploy,该游标与表student中的所有的男人记录相关联。
declare cEmploy cursor static
for
select studentno,sname
from student
where sex = '男'
order by studentno
②打开游标
声明游标后必须使用open语句打开游标才可以对其进行访问。
设计可以使用全局函数@@cursor_rows来指定或获取与游标关联的数据记录行数。使用open语句打开上例中的游标cEmploy的代码如下:
open cEmploy
③获取记录信息
使用fetch函数可以在一个打开的游标中遍历记录集中的记录。使用fetch函数获取游标中的一条记录,并将它保存到相应的变量中后,游标将会自动被定位到下一条记录上。
fetch函数格式如下:
fetch [next|prior|last|
absolute{n|@nvar|
relative{n|@nvar}]
from]
cursor_name[into @variable_name[,...n]]
例:使用fetch命令访问游标中的每条记录,列出cEmploy游标中的所有记录。
declare @Studentno as nchar(10)
declare @Sname as nchar(8)
fetch from cEmploy
into @Studentno,@Sname
set @RecCount = @RecCount -1
print '学号:'+convert(nchar(10),@Studentno)+'学生姓名:'+@Sname
④关闭游标
关闭游标意味着解锁该游标所占的所有的记录集资源。
关闭打开的cEmploy游标,可以使用下列命令:
close cEmploy
⑤释放游标
关闭游标后需要进一步释放游标本身所占有的资源,此时,可以用deallocate语句完成该项操作。
deallocate cEmploy