SQL Server2000游标循环,如何修改,可使两条fetch语句变成一条

发布网友 发布时间:2022-04-23 02:40

我来回答

1个回答

热心网友 时间:2023-10-12 02:58

首先说明,楼主读取游标的写法是正确规范的写法,效率应该也是最高的,不明白为什么非要只让fetch出现一次。

如果非要这样,可以按这个思路,在定义游标之后,再统计出此游标将会查询出的记录总数,然后定义变量,在循环中使变量增1,超过游标记录总数后,循环中止。具体代码如下:

CREATE PROCEDURE PROC_comp @Now_Date smalldatetime AS
declare @Pre_Sum_Amount numeric(18,2),@Now_Amount numeric(18,2),@Now_Sum_Amount numeric(18,2)
--搜寻前一条记录的累计金额(注意参数top 1及desc,表示倒序排列并取第一条)。
select top 1 @Pre_Sum_Amount=累计金额 from 报表2009
where 日期<@Now_Date and 日期>='2009-10-1' order by 日期 desc
set @Pre_Sum_Amount=isnull(@Pre_Sum_Amount,0)
--建立游标,计算本条记录的累计金额,并依次向后,计算出后续各条记录的累计金额。
declare cur_Accumulate cursor dynamic for
select 金额,累计金额 from 报表2009 where 日期>='2009-10-1' and 日期<='2009-10-31'
declare @t as integer,@n as integer
set @n=1
select @t=count(1) from 报表2009 where 日期>='2009-10-1' and 日期<='2009-10-31'
open cur_Accumulate
while(@n<=@t)
begin
fetch next from cur_Accumulate into @Now_Amount,@Now_Sum_Amount
set @Now_Sum_Amount=@Pre_Sum_Amount+isnull(@Now_Amount,0)
update 报表2009 set 累计金额=@Now_Sum_Amount where current of cur_Accumulate
set @Pre_Sum_Amount=@Now_Sum_Amount
set @n=@n+1
end
close cur_Accumulate
deallocate cur_Accumulate

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com