(2)创建(带参数)存储过程 题目要求:查询某位学生的指定课程的成绩和学分。 SQL: CREATE PROCEDURE query_student_grade_and_credit @Sno CHAR(10), @Cname VARCHAR(20) AS BEGIN SELECT Ccredit,Grade FROM T_Course,T_SC WHERE T_SC.Sno = @Sno AND T_Course.Cname=@Cname END EXECUTE query_student_grade_and_credit '2002151228' 请帮我修改正确
时间: 2024-02-13 07:01:12 浏览: 66
您的 SQL 语句有一些问题,需要做如下修改:
```sql
CREATE PROCEDURE query_student_grade_and_credit
@Sno CHAR(10),
@Cname VARCHAR(20)
AS
BEGIN
SELECT T_Course.Ccredit, T_SC.Grade
FROM T_SC
INNER JOIN T_Course ON T_SC.Cno = T_Course.Cno
WHERE T_SC.Sno = @Sno AND T_Course.Cname = @Cname
END
```
修改说明:
1. 存储过程名称后面需要加上参数列表,即 `query_student_grade_and_credit @Sno CHAR(10), @Cname VARCHAR(20)`。
2. SELECT 语句中需要指定查询的表以及列,需要使用表的别名来进行区分,同时需要将 T_SC 表和 T_Course 表进行连接。
3. 在 WHERE 语句中需要使用 T_SC 表中的 Cno 列来与 T_Course 表中的 Cno 列进行匹配。
接下来,您可以执行 `EXEC query_student_grade_and_credit '2002151228', '某门课程名称'` 来查询某位学生的指定课程的成绩和学分。
相关问题
用SQL Server语句,创建一个带输入参数的存储过程pro1,要求可以根据输入的学号查询学生的姓名、课程号、课程名、学分和成绩
好的,下面是创建存储过程pro1的SQL Server语句:
```
CREATE PROCEDURE pro1
@stu_id VARCHAR(10)
AS
BEGIN
SELECT s.name, c.course_id, c.course_name, c.credit, g.score
FROM student s
JOIN grade g ON s.stu_id = g.stu_id
JOIN course c ON g.course_id = c.course_id
WHERE s.stu_id = @stu_id
END
```
这个存储过程接收一个输入参数@stu_id,根据输入的学号查询学生的姓名、课程号、课程名、学分和成绩。在存储过程中,我们使用了JOIN语句将三个表(student、grade、course)连接起来,然后使用WHERE子句筛选出符合条件的记录。最后,我们通过SELECT语句返回查询结果。
创建一个存储过程,有两个输入参数:Xh学号和kcm课程号,要求当某学生某门课程的成绩小于60分时,将其学分修改为零,大于或等于60分时,将学分修改为该课程的学分
在SQL中,你可以创建一个存储过程(Procedure)来实现这个功能,例如在MySQL中:
```sql
DELIMITER //
CREATE PROCEDURE UpdateGrade(IN xh VARCHAR(50), IN kcm VARCHAR(50))
BEGIN
DECLARE new_grade INT DEFAULT 0;
UPDATE Students
SET credit = CASE
WHEN score < 60 THEN new_grade
ELSE original_credit
END
WHERE xh = xh AND course_code = kcm;
END;
DELIMITER ;
```
在这个存储过程中,我们首先声明了一个变量`new_grade`默认值为0。然后执行更新操作,如果学生的成绩低于60分,就将学分设置为0;否则,保持原有的学分不变。这里假设`Students`表有一个字段`score`表示成绩,`credit`表示学分,`xh`是学号,`course_code`是课程编号。
阅读全文