I think you need an initial
FETCH NEXT FROM CalculateAverage INTO @TotalMarks
between
OPEN CalculateAverage
and
WHILE @@FETCH_STATUS=0
What Gordon said. The use of a cursor here is misguided, you can easily do this sort of calc using SQL aggregation. AVG...GROUP BY.
I suspect the error is in SET @TotalMarks = @TotalMarks + dbo.CourseEnrollment.FinalGrade as you there really is no reference to dbo.CourseEnrollment available in that line.
Note: I am having some trouble making the formatting stick.
with you declarations:
DECLARE @FinalGrade DECIMAL(5,2)
then OPEN CalculateAverage; FETCH NEXT FROM CalculateAverage INTO @FinalGrade
WHILE @@FETCH_STATUS=0
BEGIN
SET @NumberOfCourses = @NumberOfCourses + 1
SET @TotalMarks = @TotalMarks + @FinalGrade -- @FinalGrade
FETCH NEXT FROM CalculateAverage INTO @FinalGrade
END