我正在使用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时,结果不一致。
答案 0 :(得分:0)
首先确保您现在始终使用任何SQL的订单,以确保按照预期的顺序恢复数据。您不知道数据库将如何在后端优化查询,因此具体。
同时检查直接选择并检查“SSN LIKE”%1803'匹配的行数,以便与光标交叉检查行计数。