SQL Server 游标初接触!

  在使用SELECT查询数据库的时候,得到的是一个结果集,可能是0行,也可能是多行,如果我们要逐行,或者前进一行,后退一行进行处理,我们就可以使用游标。游标类似一个指针,可以从结果集的当前位置检索一行或多行,并进行数据修改。

 

  首先来看下游标的使用过程:

      --1.使用DECLARE CURSOR声明游标

      --2.使用OPEN打开游标

      --3.使用FETCH 取得某行数据

      --4.使用CLOSE关闭游标

      --5.使用DEALLOCATE释放游标

  大致的过程就是这样,下面来看看每步具体的内容。

  游标的声明

1DECLARE 游标名称 [INSENSITIVE] [SCROLL]  CURSOR
2FOR
3SELECT 。。。
4[FOR {READ ONLY|UPDATE [OF 列]}]

 

  --INSENSITIVE 设置此属性,游标对此数据进行提取操作时返回的数据部反应基表的操作,游标不准许修改。

  --SCROLL 常用在数据浏览上。

  --READ ONLY 设置游标只读,不能修改

  --UPDATE 设置游标内可以更新的列

  打开游标

 

1OPEN {{GLOBAL}游标名称}

 

  如果指定GLOBAL,则该游标使用于所有的存储过程,触发器。

  提取行

1FETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE | RELATIVE [数值|数值变量]
2FROM 游标名称 INTO 变量1[,....n]

 

  --NEXT:取得当前数据行的下一行。如果是对游标的第一次提取操作,则读取结果集中的第一行,如果当游标已经指向结果集中的最后一行,再执行FETCH命令,则@@FETCH_STATUS值会变为-1,所以可以以@@FETCH_STATUS来判断当前状态。

  --PRIOR:读取当前数据行的前一行。如果游标当前行指向第一行数据,则@@FETCH_STATUS值会变为-1。

  --FIRST:读取游标第一行的数据。

  --LAST: 读取游标最后一行的数据。

  --ABSOLUTE [n|@n]:读取游标的第n行数据。如果n或@n为正,则返回从游标头开始的第n行数据,并将返回的行做为新的当前行。如果为负,则返回从游标尾开始的前n行数据,并将返回行做为新的当前行。如果为0,没有变化。

  --RELATIVE [n|@n]:如果n或@n为正,则读取游标当前行的后面第n行数据,如果为负责读取当前行的前n行数据,如果为0 无变化。n必须为整数,@n必须为smallint,tinyin或int

   关闭游标

 

1CLOSE 游标名称

 

  释放游标

 

1DEALLOCATE 游标名称

 

 

  在使用游标过程中,我们使用@@FETCH_STATUS 函数来获取FETCH语句的状态,当函数值为0,表示FETCH读取成功。当值为-1时,表示读取失败或者超出读取范围。当值为-2,表示读取行不存在。

 

  下面我门来看看游标的具体使用。

  有一个表T_User,通过游标取得T_User表中每一行,将每个人的年龄相加。

 

FUserNameFAge
Tom20
Jack23
Lily25

 

代码
 
    
1 -- 定义两个变量
2 DECLARE @Total INT
3 DECLARE @Age INT
4
5 SET @Total = 0
6
7 -- 声明游标
8 DECLARE MyCursor CURSOR
9 FOR
10 SELECT FAge FROM T_User
11
12 -- 打开游标
13 OPEN MyCursor
14
15 -- 提取数据
16 FETCH NEXT FROM MyCursor INTO @Age
17 WHILE @@FETCH_STATUS = 0
18 BEGIN
19 -- 把当前行的FAge列的值加到@Total变量上
20 SET @Total = @Total + @Age
21
22 -- 取得下一行,要是没有这句,会进入死循环
23 FETCH NEXT FROM MyCursor INTO @Age
24 END
25
26 -- 关闭游标
27 CLOSE MyCursor
28
29 -- 释放游标
30 DEALLOCATE MyCursor
31
32 -- 取得@Total的值
33 SELECT @Total

 

 

   最后得到结果为68。

 

  以上是对游标的初步了解,更多关于游标的内容以后继续。这只是把初学游标的理解写在这,欢迎评论和批评

转载于:https://www.cnblogs.com/sasaquan/archive/2010/10/09/1846668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值