用过游标的兄弟进来看看~~~~~
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 游标名
这个问题,实在是没想到解决方法,郁闷~~