USE SMDB
GO
IFEXISTS(SELECT*FROM sysobjects WHERE name ='usp_ScoreQuery')DROPPROCEDURE usp_ScoreQuery
GO
CREATEPROCEDURE usp_ScoreQuery @classNameVARCHAR(20),@stuCountINT OUTPUT,@absentCountINT OUTPUT,@avgDBINT OUTPUT,@avgCSharpINT OUTPUT ASIF(LEN(@className)=0)BEGIN-- Query All SchoolSELECT
m.StudentId,m.StudentName,n.ClassName,SQLServerDB,CSharp
FROM Students m
INNERJOIN StudentClass n ON m.ClassId= n.ClassId
INNERJOIN ScoreList l ON m.StudentId= l.StudentId
--查询考试统计信息select@stuCount=COUNT(*),@avgDB=AVG(SQLServerDB),@avgCSharp=AVG(CSharp)from ScoreList
select@absentCount=COUNT(*)from Students
where StudentId notin(select StudentId from ScoreList)--查询没有参加考试的学生姓名集合select StudentName from Students where StudentId
notin(select StudentId from ScoreList)ENDELSEBEGINSELECT
m.StudentId,m.StudentName, n.ClassName,SQLServerDB,CSharp
FROM
Students m
INNERJOIN StudentClass n ON m.ClassId= n.ClassId
INNERJOIN ScoreList l ON m.StudentId= l.StudentId
WHERE
ClassName =@className--查询考试统计信息 select@stuCount=COUNT(*),@avgDB=AVG(SQLServerDB),@avgCSharp=AVG(CSharp)from ScoreList
select@absentCount=COUNT(*)from Students
innerjoin StudentClass on StudentClass.ClassId=Students.ClassId
where Students.StudentId notin(select StudentId from ScoreList)and ClassName =@className--查询没有参加考试的学生姓名集合select StudentName from Students
innerjoin StudentClass on StudentClass.ClassId=Students.ClassId
where Students.StudentId
notin(select StudentId from ScoreList)and ClassName =@classNameEND
GO