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