他のテーブルのすべてのメインディッシュをカウントするカーソルを使用して関数を作成しました。テーブルにメインディッシュが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;