创建带输入参数,参数有默认值的存储过程p-3,根据输入的学生姓名,查询其sno,sname,sage,cname,grade,sdept,若参数值为NULL,则查询所有学生的,要求学生姓名参数为@name,@name默认值为NULL,分别执行带实参李勇和不带实参的李勇
时间: 2023-12-14 20:03:16 浏览: 137
数据库管理与应用 8.2.3 创建带有输入、输出参数的存储过程.pdf
好的,我来为您解答。
首先,我们需要创建一个表来存储学生和课程的信息,可以使用如下的SQL语句来创建:
```
CREATE TABLE Student (
sno VARCHAR(10) PRIMARY KEY,
sname VARCHAR(20),
sage INT,
sdept VARCHAR(20)
);
CREATE TABLE Course (
cno VARCHAR(10) PRIMARY KEY,
cname VARCHAR(20),
credit INT,
cdept VARCHAR(20)
);
CREATE TABLE Score (
sno VARCHAR(10),
cno VARCHAR(10),
grade INT,
PRIMARY KEY(sno, cno),
FOREIGN KEY(sno) REFERENCES Student(sno),
FOREIGN KEY(cno) REFERENCES Course(cno)
);
```
接下来,我们可以编写一个存储过程p-3,代码如下:
```
CREATE PROCEDURE p-3
@name VARCHAR(20) = NULL
AS
BEGIN
SELECT s.sno, s.sname, s.sage, c.cname, sc.grade, s.sdept
FROM Student s
LEFT JOIN Score sc ON s.sno = sc.sno
LEFT JOIN Course c ON sc.cno = c.cno
WHERE (@name IS NULL OR s.sname = @name)
END;
```
这个存储过程接受一个输入参数@name,其默认值为NULL。如果@name为NULL,那么查询所有学生的信息;否则,查询指定姓名的学生的信息。我们使用了LEFT JOIN来连接三个表,以便查询出每个学生的课程成绩和课程名称。
接下来,我们分别执行带实参李勇和不带实参的李勇。代码如下:
```
-- 执行带实参的李勇
EXEC p-3 @name = '李勇';
-- 执行不带实参的李勇
EXEC p-3;
```
执行带实参的李勇会查询出所有名字为李勇的学生的信息;而执行不带实参的李勇会查询出所有学生的信息。
阅读全文