游标: 为什么@@cursos_rows不能正确的返回行数?

lemon_wei 2004-04-19 11:06:47
有如下游标:
declare @cur_rowCount int
declare AppointData_Rain cursor for
select StartTime,No_50_f,No_51_f,No_52_f,No_53_f,No_54_f,No_55_f,No_56_f,No_57_f,No_58_f,No_59_f,No_60_f,No_61_f
from YZ_RealRain
order by StartTime asc

-- open it
open AppointData_Rain
select @cur_rowCount=@@cursor_rows
-- no data return
if @cur_rowCount<1
begin
print @cur_rowCount
end

结果总是返回的-1,而我直接用游标里面的查询语名进行查询,是能查到数据的。
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
8992026 2004-04-30
  • 打赏
  • 举报
回复
INSENSITIVE

定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从 tempdb 中的该临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。使用 SQL-92 语法时,如果省略 INSENSITIVE,(任何用户)对基表提交的删除和更新都反映在后面的提取中。

STATIC

定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从 tempdb 中的该临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。


DYNAMIC

定义一个游标,以反映在滚动游标时对结果集内的行所做的所有数据更改。行的数据值、顺序和成员在每次提取时都会更改。动态游标不支持 ABSOLUTE 提取选项。

KEYSET

指定当游标打开时,游标中行的成员资格和顺序已经固定。对行进行唯一标识的键集内置在 tempdb 内一个称为 keyset 的表中。对基表中的非键值所做的更改(由游标所有者更改或由其它用户提交)在用户滚动游标时是可视的。其他用户进行的插入是不可视的(不能通过 Transact-SQL 服务器游标进行插入)。如果某行已删除,则对该行的提取操作将返回 @@FETCH_STATUS 值 -2。从游标外更新键值类似于删除旧行后接着插入新行的操作。含有新值的行不可视,对含有旧值的行的提取操作将返回 @@FETCH_STATUS 值 -2。如果通过指定 WHERE CURRENT OF 子句用游标完成更新,则新值可视。

lemon_wei 2004-04-30
  • 打赏
  • 举报
回复
试过了,加 “STATIC”是可以的,能不能讲讲什么Static Cursors?
什么是Dynamic Cursors?以及 INSENSITIVE?
zhangfaji 2004-04-28
  • 打赏
  • 举报
回复
xcZXC
8992026 2004-04-28
  • 打赏
  • 举报
回复
选择合适的游标类型!!
8992026 2004-04-28
  • 打赏
  • 举报
回复
or:

declare @cur_rowCount int
declare AppointData_Rain INSENSITIVE cursor for
select StartTime,No_50_f,No_51_f,No_52_f,No_53_f,No_54_f,No_55_f,No_56_f,No_57_f,No_58_f,No_59_f,No_60_f,No_61_f
from YZ_RealRain
order by StartTime asc

-- open it
open AppointData_Rain
select @cur_rowCount=@@cursor_rows
-- no data return
if @cur_rowCount<1
begin
print @cur_rowCount
end

8992026 2004-04-28
  • 打赏
  • 举报
回复
试试:

declare @cur_rowCount int
declare AppointData_Rain cursor STATIC for
select StartTime,No_50_f,No_51_f,No_52_f,No_53_f,No_54_f,No_55_f,No_56_f,No_57_f,No_58_f,No_59_f,No_60_f,No_61_f
from YZ_RealRain
order by StartTime asc

-- open it
open AppointData_Rain
select @cur_rowCount=@@cursor_rows
-- no data return
if @cur_rowCount<1
begin
print @cur_rowCount
end
lemon_wei 2004-04-28
  • 打赏
  • 举报
回复
再UP
mustang_zr 2004-04-26
  • 打赏
  • 举报
回复
先取奇数行的求和 再取偶数行的求和 ,最后求差。
zblaoshu1979 2004-04-26
  • 打赏
  • 举报
回复
up
lemon_wei 2004-04-25
  • 打赏
  • 举报
回复
UP
lemon_wei 2004-04-19
  • 打赏
  • 举报
回复
可是我以前这么用,他是可以得到行数的呀。
楼上的老兄:这个统计是这样的,取第二行的每一个字段的值,减去每一行对应的字段的值得到一个差,然后再用第三行的去减第二行的,又得到一个差..... 最后求这些差的和。请教,如果不用游标,该怎么写呀?
holyten 2004-04-19
  • 打赏
  • 举报
回复
因为你没有过一边遍历,所以一开始返回的一定是-1,你做个例子中不用使用游标也可以的呀,为什么使用游标?简单的统计数量,count出来就可以了
lemon_wei 2004-04-19
  • 打赏
  • 举报
回复
问题找到了,StartTime 这个字段不能设为关键字,取消它为关键字就可以了,设为关键字就又不行了。可这是什么道理呢?哪位高人能指点迷津。

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧