zoukankan      html  css  js  c++  java
  • 游标

    用户可以逐行访问由SQL Server返回的结果集

    使用游标的步骤

    1,声明游标      使用T-SQL语句生成一个结果集

    2,打开游标

    3,从游标的结果集中读取数据

    4,对游标中的数据逐行操作

    5,关闭游标

    声明游标

      declare  游标名  [scroll]  cursor  for  <select  语句>

        [for  read  only  |   update  of  列名]

     例如:

       declare  mycursor  cursor  for  select  *  from  addsalary

    游标的两种类型

       有且只有两种类型:for  read  only  或 for  update   当游标方式指定为for read  only时,游标涉及表不能被修改

     指定为for  update时,可以删除或更新游标涉及的表中的行,通常缺省方式为 for  update方式

    例如:

      declare  stu_cursor  cursor  for  select  sno,sname  from  student  where  dept='计算机'  for read  only

    打开游标:

      open  游标名

    注意:

     1,当游标打开成功时,游标位置指向结果集的第一行之前

     2,只能打开已经声明但未打开的游标

     3,当执行打开游标的语句时,服务器执行声明游标时,使用的select语句

    读取游标

      fetch  [next|prior|first|last|absolute|relative]   from 游标名

      next:取下一行的数据,并把下一行作为当前行

      prior:返回紧临当行前面的结果行

      first:返回游标中的第一行并将其作为当前行

      last:返回游标中的最后一行并将其作为当前行

      absolute:当为正时,返回从游标头开始的第N行将返回的行变成新的当前行

      relative:当为正时,返回当前行之后的第N行将返回的行变成新的当前行

    读取第一行数据

      fetch  next  from mycursor   如定义了scroll,则可用所有读取方式,如没有定义,只能用next读取

    查看游标信息

      @@fetch_status  以确定是否还可以继续取数

          =0   成功    =-1,失败或此行不再结果集中  =-2,被提取的行不存在

    流程:

        1,声明游标

         declare  authors_cur  cursor   for  select  an_lname,au_fname  from   authors   where  state=‘CA’  order by  an_lname

       2,打开一个游标

          open  authors_cur

       3,执行第一次取数操作

     fetch  next  from   authors_cur

       4,检查 @@fetch_status 以确定是否还可以继续取数

            where  @@fetch_status=0

            begin

                    fetch  next  from  authors_cur

           end

        5,关闭游标

           close  authors_cur

      

    使用游标修改数据

        update  表名(或视图名)    set  列名=修改后的值    where   current  of  游标名

       注:表名可省略,但必须是声明游标中的表名,且游标必须是已经打开的游标

    例如:通过游标将学生表中第一条记录的姓名改名

        declare  cur_c  cursor  for   select  *  from  xs  for updte  of  sname

        open  cur_c

       fetch  next  from  cur_c  

       update  xs  set  sname='bbb'  where current of  cur_c

     close  cur_c

      deallocate   cur_c

    使用游标删除数据

      delete  from 表名  where  current  of  游标名   ---用户删除游标当前位置所在行,删除或游标位置向前移动一行

  • 相关阅读:
    乘法相关
    hdu 1211 RSA (逆元)
    hdu 1811 Rank of Tetris (拓扑 & 并查集)
    hdu 2153 仙人球的残影
    hdu 1426 Sudoku Killer (dfs)
    hdu 2510 符号三角形 (DFS+打表)
    zoj 1002 Fire Net (二分匹配)
    hdu 1172 猜数字
    hdu 1728 逃离迷宫 (bfs)
    《Effective C++》笔记:III(转载)
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/6362634.html
Copyright © 2011-2022 走看看