一,游标的概念: 数据库中SELECT语句返回的行集包括所有满足该语句的WHERE字句中条件的行,由语句所返回的这一完整的行集称之为结果集。应用程序并不总能将整个结果集作为一个单元来有效处理。有时应用程序需要一种机制,以便每次处理一行或一部分行。游标就是用来提供这种机制的结果集扩展。 游标包含以下两个部分: 游标结果集(Cursor Result Set):由定义该游标的SELECT语句返回的行的集合: 游标位置(Cursor Position):指向这个集合中某一行的指针。
二.游标的特点: 1.允许定位在结果集的特定行;
- 从结果集的当前位置检索一行或多行;
- 支持对结果集中当前位置的行进行数据修改;
4.为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持; 5.提供脚本、存储过程和触发器中使用的访问结果集中的数据的SQL语句
三.游标的声明: 声明游标使用 DECLARE CURSOR 语句,其语法格式如下:
DECLARE 游标名称[INSENSITIVE] [SCROLL]
[STATIC] [KEYSET] [DYNAMIC] [FAST_FROWORD] CURSOR
FOR select 语句
[FOR {READ ONLY|UPDATE[OF 列名[.....n]]}]
四.打开游标: 打开游标使用OPEN语句,其格式如下:
OPEN游标名
五.提取数据: 游标在声明而且被打开以后,其位置位于第一行,可以使用FETCH语句从游标结果集中提取数据。其语法格式如下:
FETCH[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|RELATIVE|{n|@nvar}]
FROM]游标名
[INTO @variable_name[,...n]]
六.关闭游标: 关闭游标使用CLOSE语句,其语法格式如下:
CLOSE 游标名
七.释放游标: 释放游标将释放所有分配给此游标的资源。释放游标使用DEALLOCATE语句,其语法格式如下:
DEALLOCATE 游标名
八.使用游标修改数据:
UPDATE 表名
SET 列名=表达式[...]
WHERE CURRENT OF 游标名
九.游标典型的使用过程: 十:游标使用示例: 采用游标方式输出一门课程的平均分
use stu
go
declare @i int,@g float,@c varchar(10),@sum float,@savg float
declare sc_cursor cursor
for select SC.C#,SC.G
from SC
WHERE C#='C-104'
open sc_cursor
set @sum=0
set @i = 0
fetch next from sc_cursor into @c,@g
print '课程 平均分'
print '---------------------'
while @@FETCH_STATUS = 0
begin
set @i = @i + 1;
set @sum = @sum + @g;
fetch next from sc_cursor into @c,@g
end
set @savg = @sum / @i
print cast (@c as char(5)) + ' ' +cast (@savg as char(8))
close sc_cursor
deallocate sc_cursor
go
结果:
|