0

我创建了一个带有光标的函数来计算另一个表中的所有主菜。当我这样做PRINT dbo.cursorEnroll (); 时,当我的表中只有 10 个主菜时,我得到 11 作为输出。@@FETCH = 0 应该意味着 fetch 成功,因此应该只设置 studentsEnrolled 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;
4

1 回答 1

3

因为您获取然后添加 1。对于最后一行,您enrollementID会得到 11 作为结果。@studentsEnrolledenrollementID = 10

于 2012-12-06T14:56:50.007 回答