1

我正在使用将返回 4 个值(18、13、14 和 15)的 select 语句创建一个游标。我正在尝试遍历光标并暂时显示该值。我期待 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 时,结果不一致。

4

1 回答 1

0

首先,确保您现在始终使用任何 SQL 的 order by,以确保您以您期望的顺序获取数据。您不知道数据库将如何优化后端的查询,因此请具体说明。

还要检查直接选择并检查与“SSN LIKE '%1803”匹配的行数,以交叉检查游标的行数。

于 2017-07-28T14:07:58.203 回答