看到数据库视频,发现游标好像挺重要的,及时分享下来,希望能有帮助!
游标的基本概念
游标时一种数据访问机制,它允许用户访问单独的数据行,而不是对整个行集进行操作。用户可以通过单独处理每一行遂条收集信息并对数据进行操作,这样可以降低系统开销和潜在的阻隔情况。用户也可以使用这些数据生产SQL代码并立即执行或输出。
游标基本部分
1、游标结果集 由定义游标的SELECT语句返回的行的集合
2、游标位置 指向这个结果集中的某一行的指针
游标的特点
1、游标返回一个完整的结果集,但允许程序设计语言只调用集合中的一行。
2、允许定位在结果集的特定行
3、从结果集的当前位置检索一行或多行
4、支持对结果集中当前位置的行进行数据修改
5、可以为其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
6、提供脚本,存储过程和触发器中使用的访问结果集中数据的T_SQL语句。
声明游标的语法格式
DECLARE cursor_name [INSENSITIVE][SCROLL]CURSOR
FOR select_statement
[FOR {READ ONLU|UPDATE[OF column_name[,...n]]}]
操作游标语法格式
打开游标:
OPEN {{[GLOBAL] cursor_name}]|cursor_variable_name}
检索游标
FETCH
[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|RELATIVE{n|@nvar}]
FROM]
{{[GLOBAL] cursor_name}|@cursor_variable_name}
[INTO @variable_name [,...n]]
关闭游标
CLOSE {{[GLOBAL] cursor_name}|cursor_variable_name}
释放游标
DEALLOCATE{{[GLOBAL] cursor_name}] | @cursor_variable_name]}
举例:
声明游标
declare stu_cursor scroll cursor for
select student_Name
from student_Info
打开游标
open stu_cursor
检索游标
fetch last from stu_cursor
into @name
print @name
关闭游标
close stu_cursor
判断游标的提取状态
语法格式
@@FETCH_STATUS
取值:
0 FETCH语句成功
-1 FETCH语句失败或行不在结果集中
-2 提取的行不存在
游标引用示例
declare stu_cursor scroll cursor for
select student_ID from student_Info
create table #t (name nvarchar(20),sorce int )
open stu_cursor
declare @name varchar(20)
fetch next from stu_cursor
into @name
while @@FETCH_STATUS =0
begin
insert into #t
select b.student_name ,avg(result)as 分数
from result_Info a join student_Info b
on a.student_ID =b.student_ID
where a.exam_No ='2000期中'
group by b.student_Name
fetch next from stu_cursor
into @name
end
close stu_cursor
deallocate stu_cursor
select name 姓名,sorce 平均分数 from #t
drop table #t
感谢您的阅读,期待你下一次的浏览!