在Sybase ASE中迭代游标似乎会执行多个循环

时间:2014-11-10 21:43:18

标签: sybase-ase cursors

我正在使用select语句创建一个游标,该语​​句将返回4个值(18,13,14和15)。我试图迭代光标并显示现在的值。我期待4个打印陈述,但我看到的不止于此。

以下是代码:

PRINT '***** *****'
GO
DECLARE curs CURSOR FOR
  SELECT ID FROM CUSTOMER WHERE SSN LIKE '%1803'
GO
DECLARE @ID int
OPEN curs
  FETCH NEXT curs INTO @ID 
  WHILE @@sqlstatus = 0
  BEGIN
    PRINT '* current value: %1! ', @ID 
    FETCH NEXT curs INTO @ID
  END  
CLOSE curs
DEALLOCATE CURSOR curs
GO

这是输出:

***** *****

* current value: 18 
* current value: 18 
* current value: 13 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 15 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 15

它似乎是一个简单的迭代游标,我无法理解为什么我看到这么多的打印语句,我只想看到18,13,14和15.我正在使用Sybase ASE 15.5和Razor SQL客户端。有人可以帮我这个吗?

*编辑* 当我使用Sybase Central(用于ASE)时,我没有看到问题。当我使用其他IDE时,结果不一致。

1 个答案:

答案 0 :(得分:0)

首先确保您现在始终使用任何SQL的订单,以确保按照预期的顺序恢复数据。您不知道数据库将如何在后端优化查询,因此具体。

同时检查直接选择并检查“SSN LIKE”%1803'匹配的行数,以便与光标交叉检查行计数。