SQL存储过程中游标的用法

游标的使用:    
1.declare cursor  定义游标结构并分配资源。    
原型:    
     Declate cursor_name [insensitive] [scorll] cursor for select_statement [for { read    
Only | update }[of  column _list]]     
             或者:    
             Declare cursor_name cursor [local | global] [forward_only | scroll] [static | keyset |dynamic] [read_only | scroll_locks | optimistic] for [select _statement    
[ for {read only | update } [of column_list]]]    
         参数说明:    
         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.deallocate  delete游标定义,释放资源。    
3.open  打开游标。    
原型:    
     Open { { [global]  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 [next | prior | first | last | absolute {n | @nvar} | relative {n | @nvar}] from [global]    
              Cursor_name} | cursor_variable_name } [into @variable_name ] [,……n]    
     参数说明:    
         NEXT  指明从当前的行的下一行取值。    
         PRIOR  指明人当前行的前一行取值。    
         FIRST  结果集的第一行。    
         LAST    结果集的最后一行。    
         ABSOLUTE  n表示结果集中的第n行。该行数同样可以通过一个局部变量传播。    
         RELATIVE  n表示要取出折行在当前的前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

你可能感兴趣的:(C#,游标)