2024年6月5日发(作者:)
1. 游标概述
由于SQLServer是使用结果集来处理数据,因此当需要逐条处理表中的记录时就必须使用游
标来处理。游标一般被定义和使用在服务器端,当游标
开启后,服务器为每一个游标保持一个指针,用来前后检索数据。当游标大量的使用时,服
务器端的负担很重。
2. 游标的特性
A.种类:动态游标、静态游标和、键集游标和仅向前游标;
动态游标(Dynamic):可以监测对结果集的所有操作(增、删、改),前后滚动。当滚动
时,动态游标反映结果集中所做的修改。
静态游标(Static):不能监测其他用户的所有操作,前后滚动。以快照形式把当前表存到
Tempdb临时表中,执行指令后将结果集带给游标,
新的数据值不会显示在静态游标中。
键集游标(Keyset):可以监测用户对数据的修改,前后滚动。在Tempdb中利用主键实现
对数据检索。
对于仅向前游标(Fast_only):该游标只能向前滚动。
B.功能:可设置游标结果为只读的,或可更新的;游标的移动类型等;
3 游标的状态
--声明
Declare cursor_ name Cursor for Select 语句
--打开
Open cursor_name
--提取数据
Fetch next from cursor_name into 变量1,变量2
--关闭游标
Close cursor_name
--释放游标
Deallocate cursor
4.例题
事例1、查询某个书店的订单的数量
--存储过程名称 StoreOrderSum
--输入参数:@StoreName varchar(30) 书店名称
--返回参数:@SumQty int 订单数量
--定义静态游标名称:SalesQty
Create procedure StoreOrderSum
@StoreName varchar(30)
As
Declare SalesQty cursor static
For select qty from sales
where stor_id= (select stor_id from stores where stor_name like @storename+'%')
Open SalesQty
De4clare @Qty smallint
Declare @sumqty int
select @qty=0
select @sumqty=0


发布评论