游标

还是看下上篇的那段代码:

create proc pro_abc
as
declare @p1 nvarchar(50),@p2 int;
declare my_cursor cursor scroll dynamic
for SELECT F_CR_JSGM,f_nb_xmbm FROM B_JIHUA_XIANGMU WHERE NOT  F_CR_JSGM IS NULL
    open my_cursor
    fetch next from my_cursor into @p1,@p2
    while(@@fetch_status=0)
      begin
        update b_jihua_jsgm set f_cr_jsgm2=@p1 where f_nb_xmbm=@p2
        fetch next from my_cursor into @p1,@p2
      end
    close my_cursor
    deallocate my_cursor
分解:这段是存储过程
create proc pro_abc--
as
declare @p1 nvarchar(50),@p2 int;
      begin
       select 'aaaa'
      end
 

加上游标就是这样了

create proc pro_abc
as
declare @p1 nvarchar(50),@p2 int;--声明变量和类型
--声明游标的名称my_cursor;这个游标所用到的SQL语句
----scroll表示可随意移动游标指        针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/
declare my_cursor cursor scroll dynamic
for SELECT F_CR_JSGM,f_nb_xmbm FROM B_JIHUA_XIANGMU WHERE NOT  F_CR_JSGM IS NULL
--打开游标
    open my_cursor
--必须用FETCH语句来取得数据 可以传递参数
    fetch next from my_cursor into @p1,@p2
--fetch_status=0一切正常
    while(@@fetch_status=0)
      begin
        update b_jihua_jsgm set f_cr_jsgm2=@p1 where f_nb_xmbm=@p2
        fetch next from my_cursor into @p1,@p2
      end
--关闭游标
    close my_cursor
--删除游标资源
    deallocate my_cursor

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

声明游标 
象使用其它类型的变量一样,使用一个游标之前,首先应当声明它。游标的声明包括两个部分:游标的名称;这个游标所用到的SQL语句

在游标的声明中有一点值得注意的是,如同其它变量的声明一样,声明游标的这一段代码行是不执行的,您不能将debug时的断点设在这一代码行上,也不能用IF...END IF语句来声明两个同名的游标,如下列的代码就是错误的。 
IF Is_prov="北京"THEN 
DECLARE CustomerCursor CURSOR FOR 
SELECT acct_no,name,balance 
FROM customer 
WHERE province="北京"; 
ELSE 
DECLARE CustomerCursor CURSOR FOR 
SELECT acct_no,name,balance 
FROM customer 
WHERE province〈〉"北京"; 
END IF 

----------------------------------

由于打开游标是对数据库进行一些SQL SELECT的操作,它将耗费一段时间,主要取决于您使用的系统性能和这条语句的复杂程度。如果执行的时间较长,可以考虑将屏幕上显示的鼠标改为hourglass(这句不会)

-------------------------------------

提取数据 
当用OPEN语句打开了游标并在数据库中执行了查询后,您不能立即利用在查询结果集中的数据。您必须用FETCH语句来取得数据。一条FETCH语句一次可以将一条记录放入程序员指定的变量中。事实上,FETCH语句是游标使用的核心。在DataWindow和DataStore中,执行了Retrieve()函数以后,查询的所有结果全部可以得到;而使用游标,我们只能逐条记录地得到查询结果。 
已经声明并打开一个游标后,我们就可以将数据放入任意的变量中。在FETCH语句中您可以指定游标的名称和目标变量的名称

从语法上讲,上面所述的就是一条合法的取数据的语句,但是一般我们使用游标却还应当包括其它的部分。正如我们前面所谈到的,游标只能一次从后台数据库中取一条记录,而在多数情况下,我们所想要作的是在数据库中从第一条记录开始提取,一直到结束。所以我们一般要将游标提取数据的语句放在一个循环体内,直至将结果集中的全部数据提取后,跳出循环圈。通过检测SQLCA.SQL-CODE的值,可以得知最后一条FETCH语句是否成功。一般,当SQLCODE值为0时表明一切正常,100表示已经取到了结果集的末尾,而其它值均表明操作出了问题,

更多的就是这里了http://www.knowsky.com/344071.html

今天就学到这里 再见

原文地址:https://www.cnblogs.com/0banana0/p/2065243.html