游标是从一种从表中检索并进行操作的工具
一、游标的使用:
1、声明:
语法
decalare cursor_name [insertitive][scroll] cursor
for select_statement
for{read only|update[of column_name[,...n]]}]
示例:创建一个名为“MyCursor”的标准游标
use 销售管理系统
declare MyCursor cursor for
select * from 操作员信息表
go
创建只读游标
use 销售管理系统
declare MyCursor_01 cursor for
select *from 操作员信息表
for read only —— 只读游标
go
2、打开
语法:
open {{[global]cursor_name}|cursor_variable_name
global指定为全局游标
示例:
use 销售管理系统
declare MyCursor_001 cursor for —— 声明游标
select 操作员编号,操作员姓名,操作员年龄 from 操作员信息表
where 操作员标号='CY2004'
open MyCursor_001 ——打开游标
go
3、从游标中读取数据
语法:
fetch
[[next|prior|first|las|absolute{n|@nvar}|relative{n|@nvar}]
from
]
{{[global]cursor_name}|@cursorr_variable_name}
[into @variable_name[,...n]]
@@fetch_status:返回上次执行fetch命令的状态。返回值为0,fetch语句成功;为-1,fetch语句失败或此行不在结果中;为-2,被提取的行不存在
示例:
use 销售管理系统
declare readcursor cursor for
select 操作员编号,操作员姓名,操作员性别,操作员住址
from 操作员信息表
open readcursor
fetch next from readcursor ——执行取数操作
while @@fetch_status=0 ——检查,确定是否可以继续
begin
fetch next from from readcursor
end
4、关闭
语法:close {{global]cursor_name}|cursor_variable_name}
示例:
use 销售管理系统
declare closecursor cursor for
select *from 销售表
for read only
open closecursor ——打开游标
close closecursor ——关闭游标
5、释放
语法:deallocate {{[global]cursor_name}|@cursor_variable_name}
示例:
use 销售管理系统
declare freecursor cursor for
select * from 销售表
open freecursor
close freecursor
deallocate freecursor
二、游标的相关操作
1、删除数据
delete table_name
set column_name
where current of cursor_name
示例:
use 销售管理系统
declare deletecursor cursor
for select *from 操作员信息表
where 操作员编号=‘CY2006’
open deletecursor
go
fetch next from deletecursor
delete 操作员信息奥
where current of deletecursor ——删除指定条件的数据
fetch next from deletecursor
go
close deletecursor
deallocate deletecursor
go
2、修改数据
示例:
declare @id char(20)
declare @ids char(20)
declare @name char(20)
set @id='CY2006'
declare authors_cursor cursor
for select 操作员编号,造作员姓名 from 操作员信息表
open anthors_cursor
fetch next from authors_cursor
into @ids,@names
while @@fetch_status=0
begin
if @id=@ids
begin
update 操作员信息表 set 操作员年龄=30 where 操作员编号=@ids
end
fetch next from anthors_cursor
into @ids,@names
end
close anthors_cursor
deallocate anthors_cursor
3、排序
示例:
use 销售管理系统
declare mycursor cursor
for select 商品编号,商品名称,库存数量,库存金额
from 库存表
order by 库存数量 DESC
open mycursor
fetch next from mycursor
while @@fetch_status=0
fetch next form mycursor
close mucursor
deallocate mycursor
4、包含计算
示例:
declare cur cursor
for select 商品编号,商品名称,数量,金额,数量*金额 as 销售总额
from 销售表
open cur 库
fetch next from cur
while @@fetch_status=0
begin
fetch next from cur
end
close cur
deallocate cur
三、游标锁定
use pubs
set transaction isolation leval repeatable read ——设置隔离级别为可重复
go
begin transaction
select * from authors
go
四、存储过程
sp_cursor_list :报告当前为连接打开的服务器游标的特性
sp_describle_cursor:报告服务器游标的特性
sp_describe_cursor_lolumn:报告服务器游标结果集中的特性
sp_describe_cursor_table:报告服务器游标所引用的基表