SQL中游标的使用

一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言,
如果要在查询分析器中对多行记录(即记录集)进行读取操作时,则需要使用到游标或WHILE等循环

游标的类型:
  1、静态游标(不检测数据行的变化)
  2、动态游标(反映所有数据行的改变)
  3、仅向前游标(不支持滚动)
  4、键集游标(能反映修改,但不能准确反映插入、删除)

游标使用顺序:
   1、定义游标
   2、打开游标
   3、使用游标
   4、关闭游标
   5、释放游标

Transact-SQL:
declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS]
  for selet语句   [for  update[of 列名[,列名]]
 注:LOCAL 局部游标     GLOBAL 全局游标
     FORWARD_ONLY 仅向前  SCROLL 滚动
     STATIC 静态  KEYSET 键集 DYNAMIC 动态
     READ_ONLY 只读 SCROLL_LOCKS 锁定游标当前行

获取游标的数据
  FETCH [[NEXT | PRIOR | FIRST | LAST |
  ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
  From ] 游标名 [into 变量]
  注:
    NEXT  下一行  PRIOR  上一行  FIRST 第一行
    LAST  最后一行  ABSOLUTE n 第n行
    RELATIVE n 当前位置开始的第n行
    into 变量 把当前行的各字段值赋值给变量

游标状态变量:
    @@fetch_status  游标状态
         0 成功  -1 失败  -2 丢失
    @@cursor_rows 游标中结果集中的行数
        n 行数 -1 游标是动态的  0 空集游标
操作游标的当前行:
   current of 游标名

例1:利用游标对查询的数据集进行遍历

use pubs

go

declare @auid char(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50)

declare auth_cur cursor for

select au_id, au_lname, au_fname, state

from authors

open auth_cur

fetch next from auth_cur into @auid,@aulname,@aufname, @st

while (@@fetch_status=0)

  begin

    print ‘作者编号: ‘+@auid

    print ‘作者姓名: ‘+@aulname+‘,‘+@aufname

    print ‘所在州: ‘+@st

    print ‘--------------------------‘

    fetch next from auth_cur into @auid,@aulname,@aufname, @st

  end

close auth_cur

deallocate auth_cur

例2:利用游标修改、删除数据

declare auth_cur cursor scroll for

select au_id, au_lname, au_fname, state

from authors for update of au_lname

open auth_cur

declare @rowcount int

set @rowcount = 6

fetch absolute @rowcount from auth_cur  --将变量@rowcount标识的行设置为当前行

--下面1行是利用游标进行修改操作

update authors set au_lname=‘张‘ where current of auth_cur --修改游标中的当前行

--下面1行是利用游标进行删除操作

delete from authors where current of auth_cur
时间: 2024-10-06 17:56:53

SQL中游标的使用的相关文章

SQL中游标的使用(转)

一般情况下,我们用SELECT这些查询语句时,都是针对的一行记录而言,如果要在查询分析器中对多行记录(即记录集)进行读取操作时,则需要使用到游标或WHILE等循环 游标的类型:  1.静态游标(不检测数据行的变化)  2.动态游标(反映所有数据行的改变)  3.仅向前游标(不支持滚动)  4.键集游标(能反映修改,但不能准确反映插入.删除) 游标使用顺序:   1.定义游标   2.打开游标   3.使用游标   4.关闭游标   5.释放游标 Transact-SQL:declare 游标名

sql 中游标的使用

declare @id int declare @addTime datetime declare cursor1 cursor for         --定义游标cursor1 select id,addtime from MR_Examine              --使用游标的对象(跟据需要填入select文) open cursor1                       --打开游标 declare @i int set @i=1 fetch next from curso

sql中游标的定义和使用

游标的类型:1.静态游标(不检测数据行的变化)2.动态游标(反映所有数据行的改变)3.仅向前游标(不支持滚动)4.键集游标(能反映修改,但不能准确反映插入.删除) 游标使用顺序:1.定义游标2.打开游标3.使用游标4.关闭游标5.释放游标 语法 declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS] for selet语句 [

sql中游标的使用一

@@fetch_status declare @id int set @id = 1 DECLARE cur1 CURSOR FORSELECT employeeid FROM #table OPEN cur1 ;FETCH NEXT FROM cur1 ;WHILE @@FETCH_STATUS = 0 and @id = 0   BEGIN      FETCH NEXT FROM cur1 ;   END;CLOSE cur1 ;DEALLOCATE cur1 ;GO 以上例子中字体加粗的

SQL中游标的使用--遍历数据逐行更新或删除:相当于for循环

--------------------------------------例子1 单纯的游标-------------------------------- create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10), CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] create TABLE Table2 ( a varchar(1

SQL中游标的用法

游标:是用来对表从上下每行循环取值,将值连接成为字符串.例子:对 pubs 数据库的dbo.titles 表.1.取得表中的总价格:select sum(price) from dbo.titles2.但是我想得到这样一个结果:书名,价格.精通ASP,39元:学习vc++,28元:JAVA编程,23元则用到游标: 声明游标:declare titprice CURSOR FAST_FORWARD forselect title, price from dbo.titles where price

SQL Server 中游标的使用

1.游标是行读取,占用资源比sql多2.游标的使用情景:  ->现存的系统中使用的是游标,查询必须通过游标来实现  ->用尽了while.子查询临时表.表变量.自定义函数以及其他方式仍然无法实现的时候,使用游标3.T-SQL 中游标的生命周期由5部分组成   ->定义游标:游标的定义遵循T-Sql的定义方法,赋值有两种方法,定义时赋值,和先定义后赋值,定义游标像定义其他局部变量一样前面要加@,注意如果是全局的游标,只支持定义时直接赋值,并且不能在游标前面加@   --定义时直接赋值   

Mysql中游标的使用

最近在使用Mysql时,经常需要用到游标,所以将使用方法做下记录以备日后查看.(这里只是为了说明游标的用法,不会涉及复杂的业务逻辑,所以举的例子可能并不恰当) 首先,创建两张表departmentinfo(部门信息表)和employeeinfo(员工信息表) 表结构如下: 表departmentinfo存储部门名及部门总销售额 表employeeinfo存储员工名.员工所在部门ID及员工个人销售额 表中初始数据如下: 各部门总销售额均为0 员工分别在3个部门下,且都有自己的销售额 然后创建存储过

sql 语句中游标的使用