1、游标是什么
游标是SQL 的一种数据访问机制。可以将游标简单的看成是查询的结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览需要的数据。
2、游标的优劣
优点:
游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力
缺点:
处理大数据量时,效率低下,占用内存大,一般来说,能使用其他方式处理数据时,最好不要使用游标,除非是当你使用while循环,子查询,临时表,表变量,自建函数或其他方式都无法处理某种操作的时候,再考虑使用游标
使用 DECLARE CURSOR 语句将 SQL 游标与 SELECT 语句相关联。另外,DECLARE CURSOR 语句还定义游标的特性,例如游标名称以及游标是只读还是只进。
3、使用游标的步骤
1 、定义游标—Cursor [CursorName] IS;
2 、打开游标—Open [CursorName];
3 、操作数据—Fetch [Cursorname];
4 、关闭游标—Close [Cursor Name],这个步骤绝对不可以遗漏。
4、游标的使用
使用 OPEN 语句执行 SELECT 语句并填充游标。
使用 FETCH INTO 语句提取单个行,并将每列中的数据移至指定的变量中。然后,其他 SQL 语句可以引用那些变量来访问提取的数据值。SQL 游标不支持提取行块。
使用 CLOSE 语句结束游标的使用。关闭游标可以释放某些资源,例如游标结果集及其对当前行的锁定,但如果重新发出一个 OPEN 语句,则该游标结构仍可用于处理。由于游标仍然存在,此时还不能重新使用该游标的名称。DEALLOCATE 语句则完全释放分配给游标的资源,包括游标名称。释放游标后,必须使用 DECLARE 语句来重新生成游标。
5、举例
实现要求:修改消费等级(ConsumerLevel)这个字段,当消费金额(ConsumerAmount)>1000时,等级为高消费,500-1000包含500,不包含1000,等级为中消费,小于500 等级为低消费
```sql
--声明游标
declare cur_cust_level Cursor
for select ID,ConsumerAmount from Customers
--打开游标
open cur_cust_level
--浏览数据,取数据ID,CustomerAccount
--取数据
--拿之前先定义两个变量
declare @id int
declare @Cacount int
fetch next from cur_cust_level into @id,@Cacount
--循环往下
while