2015年4月8日 星期三

[T-SQL] CURSOR 每個學生的每個科目(雙迴圈)

DECLARE cur_學生 CURSOR
FOR
SELECT 學生代號,學生姓,學生名 FROM 學生

DECLARE @代號 CHAR(11),@姓氏 VARCHAR(30),@名字 VARCHAR(30)
DECLARE @科目名 varchar(50),@成績 decimal(3,2)=0.00

OPEN cur_學生

FETCH NEXT FROM cur_學生 INTO @代號,@姓氏,@名字
WHILE(@@FETCH_STATUS=0)
BEGIN
      DECLARE cur_成績 CURSOR
 FOR
 SELECT 科目描述,修課成績 FROM 選修,課程,科目 WHERE 選修.學生代號=@代號
 AND 選修.課程代號=課程.課程代號 AND 課程.科目代號=科目.科目代號
 DECLARE @有無不及格FLAG INT=0
 OPEN cur_成績
 FETCH NEXT FROM cur_成績 INTO @科目名,@成績
 WHILE(@@FETCH_STATUS=0)
    BEGIN
       IF @成績<3.00
 BEGIN
   PRINT @代號+' '+@姓氏+' '+@名字+' -->'+@科目名+' 不及格,'+CAST(@成績 AS VARCHAR)
   SET @有無不及格FLAG=@有無不及格FLAG+1
 END
 FETCH NEXT FROM cur_成績 INTO @科目名,@成績
END
CLOSE cur_成績
DEALLOCATE cur_成績
IF @有無不及格FLAG=0   PRINT @代號+' '+@姓氏+' '+@名字+'   全部及格'
ELSE  PRINT @代號+' '+@姓氏+' '+@名字+'   '+ CAST(@有無不及格FLAG AS VARCHAR) + '科不及格'
FETCH NEXT FROM cur_學生 INTO @代號,@姓氏,@名字
END
CLOSE cur_學生
DEALLOCATE cur_學生
GO

沒有留言:

張貼留言

歡迎指教!~