973114 发表于 2018-10-24 10:22:42

SQL存储过程中游标的用法

  游标的使用:
  1.declare cursor定义游标结构并分配资源。
  原型:
  Declate cursor_name cursor for select_statement [for { read
  Only | update }]
  或者:
  Declare cursor_name cursor for [select _statement
  [ for {read only | update } ]]
  参数说明:
  INSENSITIVE指明要为检索到的结果集建立一个临时拷贝,以后的数据从这个临时拷贝中获取。原有基表中数据发生了改变,对于游标而言是不可见的。这种不敏感的游标不允许数据更改。
  SCROLL指明游标可以在任意方向上滚动。忽略该选项,则游标只能向前滚动。
  SELECT_SATAEMENT指明SQL语句建立的结果集。
  READ ONLY指明在游标结果集中不允许进行数据更改。
  UPDATE指明游标结果集可以进行修改。
  OF COLUMN_LIST指明结果集中可以进行修改的列。缺省时(使用UPDATE关键字),所有的列都可进行修改。
  LOCAL指明游标是局部的,只能在它所声明的过程中使用。全局的游标在连接激活的任何时候都是可用的。只有池连接结束时,才不再可用。
  GLOBAL 使用游标对于整个连接全局可见。
  FORWARD_ONLY指明游标只能向前滚动。
  STATIC与INSENITIVE的游标相同。
  KEYSET指明选取的行的顺序。
  DYNAMIC指明游标反映所有对结果集的修改。
  SCROLL_LOCK对修改或delete加锁。保证游标操作成功。
  OPTIMISTIC指明哪些通过游标进行的修改或者delete将不会成功。
  例如:
  Use northwind
  Go
  Declare customers_cursor cursor   //定义游标
  For select companyname , address,phone//选择部分属性
  From customers
  Where city=’london’
  For read only//只读游标
  Deallocate customers_cursor    //delete游标
  2.deallocatedelete游标定义,释放资源。
  3.open打开游标。
  原型:
  Open { { cursor_name } | cursor_variable_name }
  例如:
  Use northwind
  Go
  Declare employee_cursor cursor for    //定义游标
  Select lastname,firstname
  From northwind .dbo.employees
  Where firstname like ‘m%’
  Open employee_cursor    // 打开游标
  Fetch next from employee_cursor    //利用游标提取数据
  While @@fetch_status=0    //当利用FETCH提取数据成功时,运用循环提取下一条数据
  Begin    //循环体开始处
  Fetch next from employee_cursor
  End   //循环体结束
  close employee_cursor   //关闭游标
  Deallocate employee_cursor    // 释放游标
  4.close关闭游标并释放结果集。
  5.fetch通过游标从结果集中取值。
  原型:

  Fetch [,……n]
  参数说明:
  NEXT指明从当前的行的下一行取值。
  PRIOR指明人当前行的前一行取值。
  FIRST结果集的第一行。
  LAST    结果集的最后一行。
  ABSOLUTEn表示结果集中的第n行。该行数同样可以通过一个局部变量传播。
  RELATIVEn表示要取出折行在当前的前n行或后n行的位置上。如果该值为正数则要取出的行在当前行前n行的位置上,如果该值为负数,则返回当前行的后n行。
  INTO @cursor_variable_name表示游标列值存储的地方的变量列表。变量的数据类型也应该与被选择列的数据类型相同。直到下一次使用FETCH语句之前,变量中的值都会一直保持。
  函数返回值:
  利用@@FETCH_STATUS返回FETCH状态。
  0:FETCH 成功。
  1:FETCH 失败或超出设置范围。
  2:提取的数据行丢失。
  例如:
  Open employee_cursor
  Fetch next from employee_cursor
  While @@fetch_status = 0
  Begin
  Fetch next from employee_cursor
  End
  Close employee_curssor

页: [1]
查看完整版本: SQL存储过程中游标的用法