游标的用法

 1  table1结构如下
 2  id    int
 3 name  varchar(50)
 4 --------------------------
 5 declare @id int
 6 declare @name varchar(50)
 7 declare cursor1 cursor for    --定义游标cursor1
 8 select * from table1          --使用游标的对象(跟据需要填入 select文)
 9 open cursor1               --打开游标
 10
 11 fetch next from cursor1 into @id,@name --将游标向下移行,获取的数据放入之前定义的变量@id,@name中
 12
 13 while @@fetch_status=0         --判断是否成功获取数据
 14 begin
 15 update table1 set name=name+‘1‘
 16 where [email protected]              --进行相应处理(跟据需要填入SQL 文)
 17
 18 fetch next from cursor1 into @id,@name --将游标向下移行
 19 end
 20   21 close cursor1               --关闭游标
 22 deallocate cursor1
 游标一般格式:
DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
 FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
 WHILE @@FETCH_STATUS=0
     BEGIN
         SQL语句执行过程... ...                        FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
     END
CLOSE 游标名称
DEALLOCATE 游标名称 (删除游标)    

例子:
/*  功能:数据库表格tbl_users数据
deptid userid username
1      100      a
1      101      b
2      102      c
要求用一个sql语句输出下面结果
deptid username
1        ab
2        c
*/
create table #Temp1(deptid int,userid int,username varchar(20)) --待测试的数据表
create table #Temp2(deptid int,username varchar(20))            --结果表
--先把一些待测试的数据插入到待测试表#Temp1中 insert into #Temp1
 select 1,100,‘a‘ union all
select 1,101,‘b‘ union all
select 1,131,‘d‘ union all
select 1,201,‘f‘ union all
select 2,302,‘c‘ union all
select 2,202,‘a‘ union all
select 2,221,‘e‘ union all
select 3,102,‘y‘ union all
select 3,302,‘e‘ union all
select 3,121,‘t‘
declare @deptid int,@username varchar(20)
--定义游标
declare Select_cursor cursor for          select deptid,username from #Temp1
open Select_cursor
 fetch next from Select_cursor into @deptid,@username    --提取操作的列数据放到局部变量中
 while @@fetch_status=0      --返回被FETCH 语句执行的最后游标的状态
/*  @@FETCH_STATUS =0          FETCH 语句成功
@@FETCH_STATUS =-1 FETCH 语句失败或此行不在结果集中
@@FETCH_STATUS =-2 被提取的行不存在 */          begin                    --当表#Temp2列deptid存在相同的数据时,就直接在列username上追加@username值 

 if(exists(select * from #Temp2 where deptid=@deptid ))
      update #Temp2 set username=username [email protected] where [email protected]                   else                    --插入新数据
           insert into #Temp2 select @deptid,@username
         fetch next from Select_cursor into @deptid,@username
    end
close Select_cursor
deallocate Select_cursor
select * from #Temp2   --测试结果
 Drop table #Temp1,#Temp2
时间: 2024-08-05 10:57:09

游标的用法的相关文章

游标基础用法

Create PROCEDURE P_InsertSubject@SubjectId intASDECLARE rs CURSOR LOCAL SCROLL FORselect studentid from student where StudentGradu = 1OPEN rsFETCH NEXT FROM rs INTO @tempStudentIDWHILE @@FETCH_STATUS = 0BEGINInsert SelSubject values (@SubjectId,@temp

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

mysql游标的用法及作用

1当前有三张表A.B.C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中:常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条数据,难道要执行2000多次?显然是不现实的:最终找到写一个存储过程然后通过循环来更新C表,然而存储过程中的写法用的就是游标的形式. [简介] 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制. 游标充当指针的作用. 尽管游标能遍历结果中的所有行,但他一次只指向一行. 游标的作用

SQLServer游标的用法

DECLARE TEMP_CURSOR CURSOR SCROLL FOR     SELECT CityName FROM CoreLinkLinShi -- 此处必须有Sql语句,不能空着          OPEN TEMP_CURSOR     DECLARE @CityName varchar(50)          FETCH NEXT FROM TEMP_CURSOR INTO @CityName     WHILE @@FETCH_STATUS=0     BEGIN     

Oracle基础 游标

一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区.这个区包含了已经处理完的行数.指向被分析语句的指针,整个区是查询语句返回的数据行集.游标就是指向上下文区句柄或指针. 二.游标的分类: 1.静态游标:静态游标是在编译时知道其SELECT语句的游标.静态游标又分为两种类型,隐式游标和显示游标. 2.动态游标:用户为游标使用的查询直到运行的时候才

sql 游标

1.存储过程中有专门的定义域,在begin后.有些时候你要查询数据库,而查询的条件是要在你设置之后才进行查询的,这时候照样是不能把定义该游标放在这个设置之后,其实前面定义游标只做定义,不会进行查询,只有当你取游标的时候才会进行查询,这时候你设的值自然就进去了! 2.定义游标的查询语句比较慢,或者说可能会查询会锁表,我们要用查询语句后加上with ur,防止查询锁表. 3.定义域最后可以定义异常处理 declare exit handler for sqlexception begin value

Oracle---显式游标

一  游标的分类 在Oracle中提供了两种类型的游标:静态游标和动态游标. 1.静态游标是在编译时知道其SELECT语句的游标.静态游标又分为两种类型,即隐式游标和显式游标. 2.当用户需要为游标使用的查询直到运行的时候才能够确定时,可以使用REF游标(引用游标)和游标变量.使用引用游标必须声明游标变量.引用游标又可以分为两种类型:强类型REF游标和弱类型REF游标. 二  游标的用法 1.显式游标的用法 使用显式游标的4个步骤: 1>声明游标 语法:CURSOR cursor_name [(

Oracle数据库游标案例讲解与源码

1.游标的概念 游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果.每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理.在数据库中,游标是一个十分重要的概念.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.游标总是与一条SQL 查询语句相关联因为游标由结果集(可以是零条.一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录

oracle游标

一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区.这个区包含了已经处理完的行数.指向被分析语句的指针,整个区是查询语句返回的数据行集.游标就是指向上下文区句柄或指针. 二.游标的分类: 1.静态游标:静态游标是在编译时知道其SELECT语句的游标.静态游标又分为两种类型,隐式游标和显示游标. 2.动态游标:用户为游标使用的查询直到运行的时候才