还是看下上篇的那段代码:
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
今天就学到这里 再见