4.存储过程

1、创建一个存储过程,测试课程号为j005是否有成绩。
CREATE PROCEDURE check_grade_for_j005_1
AS
BEGIN
DECLARE @OutputValue VARCHAR(100);
IF (SELECT 课程号 FROM 课程表 WHERE 课程号 = 'j005') = 'j005'
SET @OutputValue = 'Grades for course j005 exist.';
ELSE
SET @OutputValue = 'Grades for course j005 do not exist.';

​ PRINT @OutputValue ;

END
EXEC check_grade_for_j005_1
2、创建一个存储过程,检索学生课程成绩。
CREATE PROCEDURE GetStudentGrades
@studentId INT
AS
BEGIN
SELECT 学生表.姓名,课程表.课程名, 成绩表.成绩
FROM 学生表
INNER JOIN 成绩表 ON 学生表.学号 = 成绩表.学号
INNER JOIN 课程表 ON 课程表.课程号 = 成绩表.课程号
WHERE 学生表.学号= @studentId
END

3、检索指定学号200055001的学生姓名和入学成绩。
EXEC GetStudentGrades @studentId = 200055001;

4、指定学号200055001,查找该生所考科目的最高分。

CREATE PROCEDURE GetStudentMaxScore
@StudentID varchar(50)
AS
BEGIN
SELECT MAX(成绩) AS MaxScore
FROM 成绩表
WHERE 学号 = @StudentID;
END
EXEC GetStudentMaxScore @StudentID = 200055001;
5、在第四题的基础上设置输入参数指定默认值学号为200055001。现在查找20005002。
CREATE PROCEDURE GetStudentMaxScore1
@StudentID varchar(50)
AS
BEGIN
SELECT MAX(成绩) AS MaxScore
FROM 成绩表
WHERE 学号 = @StudentID +1;
END
EXEC GetStudentMaxScore1 @StudentID = 200055001;
6、带输出参数的存储过程。建立SP,计算两个数的乘积。SP的入口参数是两个整数,SP的返回值为乘积。
CREATE PROCEDURE MultiplyNumbers
@Number1 INT,
@Number2 INT,
@Result INT OUTPUT
AS
BEGIN

SET @Result = @Number1 * @Number2

END

DECLARE @Product INT
EXEC MultiplyNumbers 2, 4, @Product OUTPUT
SELECT @Product AS 'Result'

7、依据学生表和成绩表建立平均成绩视图;在该视图上建立指定学号200055001的存储过程,检索学生的平均成绩。

a、建立平均成绩视图

CREATE VIEW AverageScores
AS
SELECT s.学号, s.姓名, AVG(e.成绩) AS 平均成绩
FROM 学生表 s
JOIN 成绩表 e ON s.学号 = e.学号
GROUP BY s.学号, s.姓名;

SELECT * FROM AverageScores

b、建立指定学号200055001的存储过程,检索学生的平均成绩

CREATE PROCEDURE GetStudentAverageScore
@StudentID varchar(50)
AS
BEGIN
SELECT 平均成绩
FROM AverageScores
WHERE 学号 = @StudentID;
END

测试检索学生的平均成绩

EXEC GetStudentAverageScore @StudentID = 200055001

posted @ 2023-04-29 19:44  郭培鑫同学  阅读(168)  评论(0编辑  收藏  举报