教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
编程设计
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

sqlserver cursor疑难

 
学院最新推荐文章
PS教程推荐
 
『sqlserver cursor疑难』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
作者:lhj82113… 来源:csdn 点击数: 更新时间:2008-8-23 

Declare cur_cso cursor for
select cso.f_aspnode,
count(*)
from tabl cso,
            tab2 cm
  where cso.f_key=cm.f_cso
and cso.f_status = 150
and convert(char(10),cso.F_CloseTime,120) = convert(char(10),@max_date,120)
group by cso.f_aspnode,
  having count(*) = 1
在后面open  cur_cso后,总是取不到记录!!!,但是我单独拿出来是能够检索出数据的,什么原因?

这个问题第1个回答:
给你看看一个简单的例子
SQL code

declare JobsCursor cursor forward_only

for

select * from jobs where min_lvl=75

open jobscursor

fetch jobscursor

update jobs set max_lvl=100

where current of jobscursor

select * from jobs where min_lvl=75

fetch relative -1 from jobscursor

close jobscursor

deallocate jobscursor


这个问题第2个回答:
楼主最好把整个程序贴出来

还有,1楼的写法肯定是错的
这个问题第3个回答:
好的,帖出来!!!

CREATE PROCEDURE [dbo].[kp_once_solve_rate]
AS
BEGIN
    Declare @max_date datetime
    Declare @curr_date datetime
Declare @diff_day int
Declare @aspnode bigint
Declare @MaterialProfile bigint
Declare @dateid datetime
Declare @cnt int
Declare @t_fact_once_solve_rate table
         (f_aspnode bigint null,
          all_qty dec(12,4))

Declare cur_cso cursor for
select cso.f_aspnode,
count(*)
from tab1 cso,
tab2 cm
  where cso.f_key=cm.f_cso
and cso.f_status = 150
and convert(char(10),cso.F_CloseTime,120) = convert(char(10),@max_date,120)
group by cso.f_aspnode,
  having count(*) = 1

    select @max_date = max(Date_id) from [fact_once_solve_rate]
    select @curr_date = convert(char(10),Getdate(),120)
select @diff_day = datediff(day,@max_date,@curr_date)
 
    WHILE @diff_day > 0
    BEGIN
select @max_date = @max_date + 1
select @diff_day = datediff(day,@max_date,@curr_date)

INSERT INTO @t_fact_once_solve_rate
  (f_aspnode
  ,all_qty)
    select f_aspnode,
  isnull(count(*),0)
  from tab2
where convert(char(10),F_CloseTime,120) = convert(char(10),@max_date,120)
  and f_status = 150
  and F_CloseTime is not null
  group by f_aspnode,

OPEN cur_cso

FETCH NEXT from cur_cso INTO  @aspnode,@cnt

WHILE @@FETCH_STATUS = 0    //跟踪这个值的时候总是-1,取不到数据!!!我cursor中的语句肯定能检索出数据
BEGIN
update @t_fact_once_solve_rate
  set solve_qty = @cnt
                      where f_aspnode = @aspnode

FETCH NEXT from cur_cso INTO  @aspnode,@cnt

END

CLOSE cur_cso

--清空临时表
delete @t_fact_once_solve_rate
END
END

这个问题第4个回答:
close后为什么不再deallocate捏?
这个问题第5个回答:
当执行Declare cursor时,只是确认游标的select语句,
只有当执行到open语句打开游标时,才真正的执行该select语句来填充游标,
游标的数据持续到close语句为止。

ps:close语句只是删除游标中的数据,并未释放资源;deallocate则删除游标的数据及占用的数据结构。
  因此,如果后面不再使用游标,可以deallocate代替close来进行回收。
这个问题第6个回答:
楼上已经说的很清楚了!看看语法吧!可能是语法没有完全搞懂!我经常这样!呵呵!
这个问题第7个回答:
应该是cso.f_key=cm.f_cso
and cso.f_status = 150
and convert(char(10),cso.F_CloseTime,120) = convert(char(10),@max_date,120
这三个条件里有不满足条件的吧。
仔细看下数据。

】【关闭窗口
·上页:
·下页:
相关文章
 
     数据库类教程 - MsSql综合技巧
普通教程怎么样通过局域网访问sql2000?
普通教程sql求助
普通教程在线等一存储过程,请高手指教
普通教程sql2005地备份文件为啥无法还原
普通教程亚莉莎 啊 亚莉莎, 快做早饭
普通教程OBJECT_ID后怎么加入变量地表名
普通教程索引超出范围。必须为非负值并小
普通教程怎么样写一存储过程用来读取文本
普通教程一个简略地存储过程(急)
普通教程求SQL语句
普通教程求字段包含在某变量中地查询
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光