0

他のテーブルのすべてのメインディッシュをカウントするカーソルを使用して関数を作成しました。テーブルにメインディッシュが10個しかないPRINT dbo.cursorEnroll (); のに、出力として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;
4

1 に答える 1

3

フェッチenrollementIDして@studentsEnrolledから1を追加するためです。最後の行でenrollementID = 10は、結果として11が得られます。

于 2012-12-06T14:56:50.007 に答える