用过游标的兄弟进来看看~~~~~

DD88 2005-11-15 10:52:43
因为需要写一个SP,要在Sybase/SQL Server两个平台下都能正常运行。
其中需要用到游标,现在有两个地方处理起来有点棘手。
第一个就是@@fetch_status循环变量
SQL Server中一般用它作为游标循环终止的判断条件
while (@@fetch_status = 0)
begin
...
end
很不幸,在Sybase中,这个变量称为"@@sqlstatus",同样是返回0表示成功。
既然如此,我想,是不是可以用一个记录集条数来代替这个变量?

首先在定义游标时:
declare CursorName Cursor for
....

open CursorName

select @Recordscount = count(*) from table -- 这里获取数据集中记录条数

while(@Recordscount > 0)
begin
....
select @Recordscount = @Recordscount - 1
end

这种方式不知是否可行?
开始我想,如果在while循环进行到一半的时候,后面的记录被其他用户删除了一条的话,那会不会导致@Recordscount 和实际记录条数不一致而导致错误? 或者说,在定义游标时,记录集就已经加载到内存中,其他用户的更改是不会影响到这些数据集的??

此外还有个难题就是两个平台的游标资源释放语句语法不一样。
Sybase: deallocate cursor 游标名
SQL Server: deallocate 游标名

这个问题,实在是没想到解决方法,郁闷~~

...全文
135 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
DD88 2005-11-17
  • 打赏
  • 举报
回复
恐怕是困难了,看来只能自己写一个程序,然后进行平台相关性转换了。
funsuzhou 2005-11-17
  • 打赏
  • 举报
回复
楼主,你在执行游标时能不能将相关表“加锁”?毕竟执行游标也不会很久的,执行完游标再“解锁”,这样可以吗?

2个平台要用统一的存储过程恐怕不可能了,如果可能的话必须有一种中间语言,使得这2个平台都能读懂这个中间语言,就象.net framework 一样
tangchao515 2005-11-17
  • 打赏
  • 举报
回复
这也不是SQL SERVER的问题,都这样啊,你可以在用游标是时候锁定数据,不过这样并发性就差了。
rfq 2005-11-17
  • 打赏
  • 举报
回复
真够难为你的
DD88 2005-11-16
  • 打赏
  • 举报
回复
顺便提一下,也可以作为一个数据集副本来填充游标,(通过关键字insensitive或者static),但是这个时候游标是只能读不能写的,即允许脏读不允许脏写。
DD88 2005-11-16
  • 打赏
  • 举报
回复
今天查了一下资料,游标是和底层数据库想对应的,这样的话,就否定了我自己说的通过数据集中记录条数来控制循环,因为有可能在操作过程中,原有的某条记录已经被删除或者修改,这样原来的数据集记录可能就不同了。

郁闷~~Sybase 12 真是郁闷!做什么不好,要把数据库卖给微软!这不?一下就让人家给摔得老远。。。
zlp321002 2005-11-16
  • 打赏
  • 举报
回复
declare @i int
select @i=count(*) from 表
while @i>0
begin
--这中操作等价吧!
--操作.....
set @i=@i-1
end
tangchao515 2005-11-16
  • 打赏
  • 举报
回复
两个平台肯定有差异的,还不会只有这个差异。
游标一般认为性能不好,但有时候游标性能反而会好,看实际情况了。原则是死的,实际应用并不一定都书上说的那样,呵呵。但尽量避免吧。
DD88 2005-11-15
  • 打赏
  • 举报
回复
to iwl():
因为同一个脚本需要运行于两个平台
SQL Server中是while(@@fetch_status)
Sybase 中是while(@@sqlstatus)

to zlp321002:
为何? 是否是性能问题? 但是有时候确实是迫不得已啊。
zlp321002 2005-11-15
  • 打赏
  • 举报
回复
--能避免用游标,尽量避免用游标!
iwl 2005-11-15
  • 打赏
  • 举报
回复
为什么不用@@CURSOR_ROWS,或者是@@FETCH_STATUS来判断。


是两个平台的游标资源释放语句语法不一样,这个没有办法

34,590

社区成员

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

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