为什么我的光标记录了1个额外的计数?

时间:2012-12-06 14:46:41

标签: sql-server cursor

我创建了一个带光标的函数来计算我的另一个表中的所有主菜。 当我做PRINT dbo.cursorEnroll ();时 当我在桌子上只有10个主菜时,我得到11作为输出。 @@ FETCH = 0应该意味着获取成功,因此应该只设置学生已注册10次。我很困惑这个额外的计数来自哪里。

免责声明:我知道这不是计算表格中条目数量的最佳方法。但是,我只是在学习和练习使用游标。

CREATE FUNCTION dbo.cursorEnroll ()
    RETURNS INT AS
    BEGIN
        DECLARE @studentsEnrolled INT
        SET @studentsEnrolled = 0
        DECLARE myCursor CURSOR FOR
            SELECT enrollementID
                FROM courseEnrollment
        OPEN myCursor;

        FETCH NEXT FROM myCursor INTO @studentsEnrolled

        WHILE @@FETCH_STATUS = 0
            BEGIN
                SET @studentsEnrolled = @studentsEnrolled+1
                    FETCH NEXT FROM myCursor INTO @studentsEnrolled
            END;
        CLOSE myCursor
        RETURN @studentsEnrolled

    END;

1 个答案:

答案 0 :(得分:3)

因为您将enrollementID提取到@studentsEnrolled然后添加1.对于最后一行enrollementID = 10,结果会得到11。