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  游标名   ---用户删除游标当前位置所在行,删除或游标位置向前移动一行

  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/6362634.html
Copyright © 2011-2022 走看看